Каковы правила поиска имени и упрощения типов для конечных типов возврата? - PullRequest
4 голосов
/ 19 октября 2019

Конечные типы возврата позволяют упростить код в следующих двух сценариях:

  1. Возвращение типа, определенного внутри класса, из одной из функций-членов класса:

    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 { /* ... */ }
    
  2. Возвращая сложный тип, такой как тип указателя функции:

    // pre-C++11
    int(*g(float))(int) { /* ... */ }
    
    // trailing, easier to read
    auto f(float) -> int(*)(int) { /* ... */ }
    

Я пытаюсь найти соответствующие части Стандарта, которые объясняют, как два вышеупомянутыхупрощения работы. Я посмотрел на [basic.lookup] и набрал trailing-return, но не смог найти ничего простого, объясняющего, как работают вышеуказанные преобразования.

Я пропустил это?

Какие части Стандарта объясняют вышеупомянутые упрощенный тип возврата упрощения?

1 Ответ

2 голосов
/ 19 октября 2019

IMO, у вас есть два несвязанных вопроса, я постараюсь ответить на первый. Он покрывается [basic.scope.class] /1.5:

Потенциальная область объявления, которая распространяется до или после конца определения класса, также распространяется нарегионы, определенные его определениями-членами, даже если члены определены лексически вне класса (это включает определения статических членов-данных, определения вложенных классов, определения функций-членов (включая тело функции-члена и любую часть части объявлений таких определений, которая следует ниже). идентификатор-объявления , включая -класс-объявления-параметра и любые аргументы по умолчанию ([dcl.fct.default]).

В выходнойопределения класса-члена

auto X::f() -> foo { /* ... */ }

тип конечного возврата соответствует идентификатор объявления X::f, так что этопотенциальная область видимости для членов класса, поэтому неквалифицированный поиск находит X::foo, когда там упоминается foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...