http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51406
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-12-04 15:26:07 UTC --- the conversions create unnecessary temporaries int&& a = static_cast<A&&>(x).a; int&& b = static_cast<B&&>(x).b; std::cout<<"a="<<&a<<", b="<<&b<<std::endl; shows they have the same address