Почемуdecltype вычитается результат в своем классе функции, определенная
struct MyStruct {
auto foo() { return 1; }
auto bar() { return foo(); }
};
компиляция, но при использовании трейлинга типа возвращаемого значения следующим образом:
struct MyStruct {
auto foo() { return 1; }
auto bar() -> decltype(foo()) { return foo(); }
};
компиляции завершается с
error: function 'foo' with deduced return type cannot be used before it is defined
Это правильное поведение в части реализации?
Да. Функциональные тела членов логически следуют определению класса, даже если он определен в строке. –
Ну, если вы можете использовать простой 'auto' вывод на возвращаемом типе' foo', почему бы не использовать его для 'bar'? – StoryTeller
Я не вижу смысла 'decltype'. Я что-то упускаю? Вы ищете 'auto & foo() {return i; } auto bar() -> decltype (auto) {return foo(); } '? – ZDF