x is an lvalue -- it can be assigned to. But in the case of: char x[] = "fred"; x is not an lvalue, it is an rvalue -- you cannot assign to it. Share Improve this answer Follow answered Nov 9, 2009 at 22:57 Lee-Man 39411 silver badge88 bronze badges Add a comment ...
&& is specifically a reference to a rvalue, usually a temporary and most of the examples bind to results of computations (eg a reference to (x+y). It is a special syntax just for that purpose alone. & is now being called an lvalue reference, which should not be applied to temporary ...
[This is due to §5.19/2: A constant expression must not include a subexpression that involves "an lvalue-to-rvalue modification unless […] a glvalue of integral or enumeration type […]" Thanks to Richard Smith for correcting my earlier claim that this was true for all literal types.]...
6) Computes the common reference type of T. This is the common reference type between its reference type and an lvalue reference to its value type.7) The exposition-only concept dereferenceable is satisfied if and only if the expression *std::declval<T&>() is valid and has a ...