自动使用parens是否意味着函数原型?

时间:2011-07-19 12:48:14

标签: c++ function c++11 type-inference

这个问题源于无法对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标准说这应该被解释为什么?

1 个答案:

答案 0 :(得分:6)

我得到了

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

编译器期待像

这样的东西
auto x( X() ) -> int;

这相当于第2行。