$4.2/1 - "An lvalue or rvalue of type “array ofN T” or “array of unknown bound of T” can be converted to an rvalue of type “pointer to T.” The result is a pointer to the first element of the array."
I am not sure how do we get an rvalue of an array type other than during initialization/declaration?
Would this stand a chance to demonstrate Array Rvalue?
I'm not sure what you refer to by "initialization/declaration" in this context. In the following, the array is a prvalue
This can be verified by
decltype(alias<int[]>{1, 2, 3})
having the typeint[3]
. Creating arrays this way on the fly wasn't initially intended to work but slipped into the working draft by-the-way of related work on uniform initialization. When I realized that some paragraphs in the C++0x working draft disallow some special case of this on-the-fly creation of array temporaries while other paragraphs allow it, I sent a defect report to the C++ committee, which then on the basis of GCC's partially working implementation decided to fully support this.You cannot get an rvalue of array type. Arrays can only be lvalues, and whenever they are used in an lvalue they decay to a pointer to the first element.
The expression
array
in [1] is an lvalue of typeint (&)[10]
that gets converted to an rvalue of typeint *p
, that is, the rvalue array of N==10 T==int is converted to an lvalue of type pointer to T==int.