Алиас типа функции-члена класса

#include <iostream>

struct S {
    using Func = int();
    Func f {
        return 42;
    }
};


int main() {
    S s;
    std::cout << s.f() << '\n';
}

error: invalid initializer for member function 'int S::f()'

Почему этот код не компилируется? Как сделать, чтобы компилировался?


Ответы (2 шт):

Автор решения: KoVadim

f - это не функция, а переменная, которая должна хранить функцию. Поэтому, весь синтаксис и не нравится компилятору. Исправим

#include <iostream>

struct S {
    using Func = int();
    // нужен указатель на функцию, что бы сохранить
    // и добавим туда лямбду, что бы попроще.
    Func *f { +[](){return 42;} };
};


int main() {
    S s;
    std::cout << s.f();
}
→ Ссылка
Автор решения: user7860670

Определение функции сделано неправильно. В такой ситуации оно должно быть вне класса и использовать обычный синтаксис:

#include <iostream>

struct S
{
    using Func = int();
    Func f;
};

int S::f()
{
    return 42;
}

int main()
{
    S s;
    std::cout << s.f() << '\n';
}

online compiler

→ Ссылка