Consider: #include <iostream> void f(int &) { std::cout << "lvalue\n"; } void f(int &&) { std::cout << "rvalue\n"; } int main() { int x(3); f(reinterpret_cast<int&&>(x)); }
This /should/ output "rvalue", but it outputs "lvalue" instead (when compiled with -std=c++0x). In 5.2.10p1, n2691 (the most recent C++0x draft) states w.r.t. reinterpret_cast<T>(v): "If T is an lvalue reference type, the result is an lvalue; otherwise, the result is an rvalue" -- Summary: reinterpret_cast<T&&>(v) incorrectly yields an lvalue Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: gcc-bugzilla at contacts dot eelis dot net http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37204