这个问题源于无法对auto
关键字使用统一初始化语法,因为它将其视为std::initializer_list<T>
(在评论here中说明)。
采用以下代码示例:
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标准说这应该被解释为什么?
答案 0 :(得分:6)
我得到了
error: 'x' function uses 'auto' type specifier without late return type
编译器期待像
这样的东西auto x( X() ) -> int;
这相当于第2行。