2 // { dg-do compile { target c++11 } }
3 // { dg-options "-Wpessimizing-move" }
8 struct remove_reference
11 template<typename _Tp>
12 struct remove_reference<_Tp&>
13 { typedef _Tp type; };
15 template<typename _Tp>
16 struct remove_reference<_Tp&&>
17 { typedef _Tp type; };
19 template<typename _Tp>
20 constexpr typename std::remove_reference<_Tp>::type&&
21 move(_Tp&& __t) noexcept
22 { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
43 return std::move (t); // { dg-warning "moving a local object in a return statement prevents copy elision" }
49 // Not a local variable.
67 return std::move (t); // { dg-warning "moving a local object in a return statement prevents copy elision" }
73 // Function parameter; std::move is redundant but not pessimizing.
78 fn6 (T t, U u, bool b)
83 // Function parameter; std::move is redundant but not pessimizing.
95 return std::move (u); // { dg-warning "moving a local object in a return statement prevents copy elision" }
102 // Non-local; don't warn.
103 return std::move (t);
120 return std::move ((t)); // { dg-warning "moving a local object in a return statement prevents copy elision" }
122 return (std::move (t)); // { dg-warning "moving a local object in a return statement prevents copy elision" }
124 return (std::move ((t))); // { dg-warning "moving a local object in a return statement prevents copy elision" }
131 return std::move (42);