Вывод типа результата функции

212
27 февраля 2017, 12:42

Пытаюсь вывести тип результата одной функции и подставить его в аргумент другой + добавить ссылку:

struct A {
    auto foo(int) const {
        return 42;
    }
    void bar(std::result_of_t<decltype(foo(int{}))>& i) {}
};

Однако получаю много ошибок компиляции. Как сделать правильно для любого типа результата (не только int)?

Answer 1
auto foo(int) const {
    return 42;
}

это уже сразу С++14, но не С++11.

При этом дедукция типа auto будет выполнена только после завершения определения класса, по каковой причине определить возвращаемый тип foo внутри определения класса не получится (если не рассматривать внутренность тел методов).

Если вы явно укажете тип

auto foo(int) const -> int {
    return 42;
}

то будет работать

void bar(std::result_of_t<decltype(&A::foo)(A, int)>& i) {}

Попытка сделать

void bar(decltype(foo(int{}))>& i) {}

не пройдет, потому что ссылаться на foo без объекта в этом месте запрещается. А "потенциальный" вариант

void bar(decltype(std::declval<A>().foo(int{}))>& i) {}

не проходит из-за незавершенности типа A.

READ ALSO
построчная работа с текстом [дубликат]

построчная работа с текстом [дубликат]

На данный вопрос уже ответили:

233
Передача вектора в функцию С++ [требует правки]

Передача вектора в функцию С++ [требует правки]

В функции main я создаю вектор pТеперь мне необходимо передать его в функцию

280
Как удалить файл после его шифрования?

Как удалить файл после его шифрования?

Всем приветПишу для себя программу, которая шифрует мои файлы алгоритмом AES-256

230
Сколько чисел представимо данным типом

Сколько чисел представимо данным типом

Как узнать, сколько чисел представимо данным типом, кроме std::pow(2, sizeof(type)*8)?

332