Этот вопрос возник из-за невозможности использования единого синтаксиса инициализации с ключевым словом 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 говорит, что это следует интерпретировать как?