Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/cpp0x/Wredundant-move6.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 // PR c++/87882 | |
2 // { dg-do compile { target c++11 } } | |
3 // { dg-options "-Wredundant-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 Foo { | |
26 Foo Bar() { | |
27 return std::move(*this); // { dg-bogus "redundant move in return statement" } | |
28 } | |
29 Foo Baz() { | |
30 return *this; | |
31 } | |
32 int i; | |
33 }; | |
34 | |
35 void Move(Foo & f) | |
36 { | |
37 f = Foo{}.Bar(); | |
38 } | |
39 | |
40 void NoMove(Foo & f) | |
41 { | |
42 f = Foo{}.Baz(); | |
43 } |