g++ does not give any error or warning for a reinterpret_cast when the target type is an rvalue reference type and the expression operand is a prvalue, for example reinterpret_cast<int&&>(1). In standard section [expr.reinterpret.cast], casts to reference types are described only by paragraph 11, which allows casting a glvalue to a reference type, but specifically says "No temporary is created". So the temporary materialization conversion can't be implicitly used like in most expressions, and the paragraph can't apply. Clang++, MSVC, and ICC all produce error messages for the expression reinterpret_cast<int&&>(1).
This was correctly rejected until r260622: Fix cast to rvalue reference from prvalue. * cvt.c (diagnose_ref_binding): Handle rvalue reference. * rtti.c (build_dynamic_cast_1): Don't try to build a reference to non-class type. Handle xvalue argument. * typeck.c (build_reinterpret_cast_1): Allow cast from prvalue to rvalue reference. * semantics.c (finish_compound_literal): Do direct-initialization, not cast, to initialize a reference.
The master branch has been updated by Jason Merrill <jason@gcc.gnu.org>: https://gcc.gnu.org/g:07f56824fd4da14a48030e698c8eb58de951c741 commit r11-7994-g07f56824fd4da14a48030e698c8eb58de951c741 Author: Jason Merrill <jason@redhat.com> Date: Mon Apr 5 15:50:48 2021 -0400 c++: reinterpret_cast from prvalue to rvalue ref [PR98440] In r260622 I allowed this under the general principle that [basic.lval] "Whenever a prvalue appears as an operand of an operator that expects a glvalue for that operand, the temporary materialization conversion (7.3.4) is applied to convert the expression to an xvalue." But [expr.reinterpret.cast] specifically excludes creating a temporary in this case. gcc/cp/ChangeLog: PR c++/98440 * typeck.c (build_reinterpret_cast_1): Don't perform temporary materialization. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/rv-cast6.C: Expect reinterpret_cast error. * g++.dg/cpp0x/reinterpret_cast2.C: Adjust message. * g++.old-deja/g++.jason/rvalue3.C: Likewise.
Fixed for 11 so far.
GCC 9.4 is being released, retargeting bugs to GCC 9.5.
*** Bug 86633 has been marked as a duplicate of this bug. ***
GCC 9 branch is being closed
GCC 10.4 is being released, retargeting bugs to GCC 10.5.
Fixed in GCC 11.