If I read implicit conversions correctly:
Lvalue to rvalue conversion
A glvalue of any non-function, non-array type T can be implicitly converted to a prvalue of the same type. [..]
Unless encountered in unevaluated context (in an operand of sizeof, typeid, noexcept, or decltype), this conversion effectively copy-constructs a temporary object of type T using the original glvalue as the constructor argument, and that temporary object is returned as a prvalue.
Then why does this not work?
int* iptr = nullptr;
int*&& irr = iptr; // Cannot bind lvalue to rvalue reference
The type int*
should have been implicitly converted to a prvalue of the same type via a temporary - thus binding to the rvalue reference without issues.