CWG Issue 891 (original) (raw)
This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 118e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-11-05
891.const_cast to rvalue reference from objectless rvalue
Section: 7.6.1.11 [expr.const.cast]Status: CD2Submitter: Steve AdamczykDate: 8 May, 2009
[Voted into WP at March, 2010 meeting.]
7.6.1.11 [expr.const.cast] paragraph 4 says,
...Similarly, for two effective object types T1 andT2, an expression of type T1 can be explicitly converted to an rvalue of type T2 using the castconst_cast<T2&&> if a pointer to T1 can be explicitly converted to the type “pointer to T2” using a const_cast. The result of a referenceconst_cast refers to the original object.
However, in some rvalue-reference const_casts there is no “original object,” e.g.,
const_cast<int&&>(2)Notes from the July, 2009 meeting:
The coresponding cast to an lvalue reference to const is ill-formed: in such cases, the operand must be an lvalue. The consensus of the CWG was that a cast to an rvalue reference should only accept an rvalue that is an rvalue reference (i.e., an object).
Proposed resolution (February, 2010):
Change 7.6.1.11 [expr.const.cast] paragraph 4 as follows:
An lvalue of type T1 can be explicitly converted to an lvalue of type T2 using the castconst_cast<T2&> (where T1 andT2 are object types) if a pointer to T1 can be explicitly converted to the type “pointer toT2” using a const_cast. Similarly, for two object types T1 and T2, an
expressionlvalue of type T1 or, if T1 is a class type, an expression of typeT1, can be explicitly converted to an rvalue of type T2 using the castconst_cast<T2&&> if a pointer toT1 can be explicitly converted to the type “pointer to T2” using a const_cast. The result of a reference const_cast refers to the original object.