Может ли auto с использованием parens означать прототип функции? - PullRequest
7 голосов
/ 19 июля 2011

Этот вопрос возник из-за невозможности использования единого синтаксиса инициализации с ключевым словом auto, поскольку он обрабатывает его как std::initializer_list<T> (пояснение в комментариях здесь ).

Возьмите следующий пример кода:

class X { };
int x( X() ); // function prototype (1)
auto x( X() );  // copy/move construction of an X, function prototype or compile-time error?

Что делает компилятор с auto x?

Обоснование для каждой возможности:

Конструкция копирования / перемещения: Я вижу, что это правильное поведение из-за того, что (1) рассматривается как своего рода дефект.

Прототип функции: Кажется маловероятным, поскольку нет конечного типа возврата.

Ошибка времени компиляции: Если компилятор анализирует это как прототип функции, это может вызвать ошибку времени компиляции из-за отсутствия завершающего возвращаемого типа.

Чтостандарт C ++ 0x говорит, что это следует интерпретировать как?

1 Ответ

6 голосов
/ 19 июля 2011

Я получаю

error: 'x' function uses 'auto' type specifier without late return type

Компилятор ожидает что-то вроде

auto x( X() ) -> int;

, что будет эквивалентно строке 2.

...