Rvalue ссылка на литерал 3
:
int && w = 3;
фактически связан с временным значением, которое является результатом вычисления выражения 3
. Это не связано с каким-то платоническим литералом 3.
(все следующие ссылки на стандарты взяты из проекта за март 2011 года, n3242)
3.10 / 1 "Lvalues и rvalues"
Значение литерала, такого как 12, 7.3e5 или true, также является prvalue
Тогда 8.5.3 «Ссылки» дает правила того, как ссылка связана с последним случаем, который гласит:
В противном случае временный тип «cv1 T1» создается и инициализируется из выражения инициализатора с использованием правил неинициализированной инициализации копирования (8.5). Ссылка затем привязывается к временному.
и приводит в качестве примера нечто очень близкое к тому, что есть в вашем вопросе:
double&& rrd = 2; // rrd refers to temporary with value 2.0