2 // { dg-do compile { target c++11 } }
3 // { dg-options "-Wredundant-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); }
25 struct T { T(); T(const T&); T(T&&) = delete; };
27 struct W { W(const W&); W(W&&) = delete; W(const W&&); };
32 return std::move(rt); // { dg-warning "redundant move" }
37 return std::move(t); // { dg-warning "redundant move" }
52 return std::move(t); // { dg-warning "redundant move" }
55 struct S1 { S1(S1 &&) = delete; S1(const S1&); };
60 return std::move(s); // { dg-warning "redundant move" }