1 // { dg-do link { target c++11 } } 2 3 template<typename _Tp> 4 inline _Tp&& movel(_Tp & __t)5movel(_Tp& __t) 6 { return static_cast<_Tp&&>(__t); } 7 8 struct S {}; 9 struct T 10 { TT11 T(S && s_) : s(movel(s_)) {} getT12 S && get() { return movel(s); } 13 operator S&&() { return movel(s); } 14 S && s; 15 S s2; 16 }; 17 named(S const &)18void named(S const &) {} 19 void named(S&&); 20 21 void unnamed(S const &); unnamed(S &&)22void unnamed(S&&) {} 23 f(S && p)24void f(S && p) 25 { 26 S && s(movel(p)); 27 T t(movel(s)); 28 29 named(s); // variable reference 30 named(p); // parameter reference 31 named(t.s); // class member access 32 33 unnamed(t.get()); // function return 34 unnamed(t); // implicit conversion 35 unnamed(static_cast<S&&>(s)); // cast to rvalue 36 unnamed(static_cast<T&&>(t).s2); // cast to rvalue 37 } 38 main()39int main() 40 { 41 } 42