auto using parent是否意味着函数原型?

Can auto using parens mean a function prototype?

本文关键字:函数 原型 意味着 是否 using parent auto      更新时间:2023-10-16

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

我得到

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

编译器期望类似

的内容
auto x( X() ) -> int;

相当于第2行