Ответ 1
Ссылка 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