Конечные типы возврата позволяют упростить код в следующих двух сценариях:
Возвращение типа, определенного внутри класса, из одной из функций-членов класса:
struct X
{
using foo = int;
foo f();
};
// pre-C++11
X::foo X::f() { /* ... */ }
// trailing, doesn't require `X::` before `foo`
auto X::f() -> foo { /* ... */ }
Возвращая сложный тип, такой как тип указателя функции:
// pre-C++11
int(*g(float))(int) { /* ... */ }
// trailing, easier to read
auto f(float) -> int(*)(int) { /* ... */ }
Я пытаюсь найти соответствующие части Стандарта, которые объясняют, как два вышеупомянутыхупрощения работы. Я посмотрел на [basic.lookup]
и набрал trailing-return
, но не смог найти ничего простого, объясняющего, как работают вышеуказанные преобразования.
Я пропустил это?
Какие части Стандарта объясняют вышеупомянутые упрощенный тип возврата упрощения?