This question arose from being unable to use uniform-initialisation syntax with the auto keyword because it treats it as a std::initializer_list<T> (explanation in the comments here).
Take the following code example:
class X { };
int x( X() ); // function prototype (1)
auto x( X() ); // copy/move construction of an X, function prototype or compile-time error?
What does the compiler do with auto x?
Reasoning for each possibility:
Copy/move construction: I can see this being the proper behaviour due to (1) being seen as a kind of defect.
Function prototype: Seems unlikely as there is no trailing return type.
Compile-time error: If the compiler does parse this as a function prototype, it may cause a compile-time error due to lacking a trailing return type.
What does the C++0x standard say this should be interpreted as?
I get
The compiler is expecting something like
which would be equivalent to line 2.