I know only object could have reference. But literals are not object. So I could understand why following code cannot compile:
int &a = \'4\';
int &b = 2
A integer or character literal is a prvalue [expr.prim.general]
A literal is a primary expression. Its type depends on its form (2.13). A string literal is an lvalue; all other literals are prvalues.
Since it is a prvalue we are allowed to take a const &
to it but we cannot take a reference to it. If we take a const &
to the temporary the the lifetime of the temporary will be extended to the point where the reference goes out of scope.
{
const int & a = 42;
//line of code
//42 still exits here
} // a goes out of scope and now 42 is gone