1 // PR c++/86981
2 // { dg-do compile { target c++11 } }
3 // { dg-options "-Wpessimizing-move" }
4 
5 // Define std::move.
6 namespace std {
7   template<typename _Tp>
8     struct remove_reference
9     { typedef _Tp   type; };
10 
11   template<typename _Tp>
12     struct remove_reference<_Tp&>
13     { typedef _Tp   type; };
14 
15   template<typename _Tp>
16     struct remove_reference<_Tp&&>
17     { typedef _Tp   type; };
18 
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); }
23 }
24 
25 struct T { };
26 
27 T
28 fn1 ()
29 {
30   T t;
31   return (1, std::move (t));
32 }
33 
34 T
35 fn2 ()
36 {
37   T t;
38   return [&](){ return std::move (t); }();
39 }
40 
41 T
42 fn3 ()
43 {
44   T t;
45   return [=](){ return std::move (t); }();
46 }
47