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 }