Proposed resolution (April, 2013): Change the example in 9.2.9.3 [dcl.type.simple] paragraph 4 as follows:
const int&& foo();
int i;
struct A { double x; };
const A* a = new A();
decltype(foo()) x1 =
i 17; // type is const int&&
decltype(i) x2; // type is int
decltype(a->x) x3; // type is double
decltype((a->x)) x4 = x3; // type is const double&
The example in 9.2.9.3 [dcl.type.simple] paragraph 4 reads,
in part, The initialization is an ill-formed attempt to bind an rvalue
reference to an lvalue.
const int&& foo();
int i;
decltype(foo()) x1 = i; // type is const int&&