2 // { dg-do compile { target c++11 } }
3 // { dg-options "-Wpessimizing-move" }
7 inline namespace _8 { }
10 struct remove_reference
11 { typedef _Tp type; };
13 template<typename _Tp>
14 struct remove_reference<_Tp&>
15 { typedef _Tp type; };
17 template<typename _Tp>
18 struct remove_reference<_Tp&&>
19 { typedef _Tp type; };
21 template<typename _Tp>
22 constexpr typename std::remove_reference<_Tp>::type&&
23 move(_Tp&& __t) noexcept
24 { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
46 return std::move (t); // { dg-warning "moving a local object in a return statement prevents copy elision" }
52 // Not a local variable.
70 return std::move (t); // { dg-warning "moving a local object in a return statement prevents copy elision" }
76 // Function parameter; std::move is redundant but not pessimizing.
81 fn6 (T t, U u, bool b)
86 // Function parameter; std::move is redundant but not pessimizing.
98 return std::move (u); // { dg-warning "moving a local object in a return statement prevents copy elision" }
105 // Non-local; don't warn.
106 return std::move (t);
123 return std::move ((t)); // { dg-warning "moving a local object in a return statement prevents copy elision" }
125 return (std::move (t)); // { dg-warning "moving a local object in a return statement prevents copy elision" }
127 return (std::move ((t))); // { dg-warning "moving a local object in a return statement prevents copy elision" }
134 return std::move (42);