Пытаюсь вывести тип результата одной функции и подставить его в аргумент другой + добавить ссылку:
struct A {
auto foo(int) const {
return 42;
}
void bar(std::result_of_t<decltype(foo(int{}))>& i) {}
};
Однако получаю много ошибок компиляции. Как сделать правильно для любого типа результата (не только int)?
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.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники