Lvalue-to-rvalue conversions

If an lvalue C++11or xvalueC++11 is used in a situation in which the compiler expects a C++11(prvalue)C++11 rvalue, the compiler converts the lvalue C++11or xvalueC++11 to a C++11(prvalue)C++11 rvalue. However, a C++11(prvalue)C++11 rvalue cannot be converted implicitly to an lvalueC++11 or xvalueC++11, C++ onlyexcept by user-defined conversionsC++ only. The following table lists exceptions to this rule.
Situation before conversion Resulting behavior
The lvalue is a function type. A pointer to function
The lvalue is an array. A pointer to the first element of the array
The type of the lvalue C++11or xvalueC++11 is an incomplete type. compile-time error
The lvalue C++11or xvalueC++11 refers to an uninitialized object. undefined behavior
The lvalue C++11or xvalueC++11 refers to an object not of the type of the C++11(prvalue)C++11 rvalue, nor of a type derived from the type of the C++11(prvalue)C++11 rvalue. undefined behavior
C++ onlyThe lvalue C++11or xvalueC++11 is a nonclass type, qualified by either const or volatile.C++ only The type after conversion is not qualified by either const or volatile.