如果我正确阅读implicit conversions:
左值转换的左值
任何非函数非数组类型T的glvalue都可以隐式转换为相同类型的prvalue 。 [..]
除非在未评估的上下文中遇到(在sizeof,typeid,noexcept或decltype的操作数中),否则此转换使用原始glvalue作为构造函数参数有效地复制构造类型为T的临时对象,并且该临时object作为prvalue返回。
那为什么这不起作用?
int* iptr = nullptr;
int*&& irr = iptr; // Cannot bind lvalue to rvalue reference
类型int*
应该通过临时隐式转换为相同类型的prvalue - 从而绑定到rvalue引用而没有问题。
答案 0 :(得分:2)
标准规定这是明确的形式错误;不应该(不应该)考虑左值到右值的转换。
如果引用是右值引用,则初始化表达式不应是左值。
[实施例:
double d2 = 1.0; double&& rrd2 = d2; // error: initializer is lvalue of related type