diff options
author | Marek Polacek <polacek@redhat.com> | 2022-08-17 15:43:45 -0400 |
---|---|---|
committer | Marek Polacek <polacek@redhat.com> | 2022-08-17 15:45:14 -0400 |
commit | 177e93e95272e9b373203dee5b28d2b284ffa05e (patch) | |
tree | 07df8a5fa395e92bc46cceffbd986d960e8990ba /gcc | |
parent | 5adfb6540db95da5faf1f77fbe9ec38b4cf8eb1f (diff) | |
download | gcc-177e93e95272e9b373203dee5b28d2b284ffa05e.zip gcc-177e93e95272e9b373203dee5b28d2b284ffa05e.tar.gz gcc-177e93e95272e9b373203dee5b28d2b284ffa05e.tar.bz2 |
c++: Add new std::move test [PR67906]
As discussed in 67906, let's make sure we don't warn about a std::move
when initializing when there's a T(const T&&) ctor.
PR c++/67906
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/Wredundant-move11.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/Wredundant-move11.C | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/Wredundant-move11.C b/gcc/testsuite/g++.dg/cpp0x/Wredundant-move11.C new file mode 100644 index 0000000..5dfa37f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/Wredundant-move11.C @@ -0,0 +1,32 @@ +// PR c++/67906 +// { dg-do compile { target c++11 } } +// { dg-options "-Wall -Wextra" } + +// Define std::move. +namespace std { + template<typename _Tp> + struct remove_reference + { typedef _Tp type; }; + + template<typename _Tp> + struct remove_reference<_Tp&> + { typedef _Tp type; }; + + template<typename _Tp> + struct remove_reference<_Tp&&> + { typedef _Tp type; }; + + template<typename _Tp> + constexpr typename std::remove_reference<_Tp>::type&& + move(_Tp&& __t) noexcept + { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); } +} + +struct X { + X() { } + X(const X&) { } + X(const X&&) { } +}; + +const X x; +const X y = std::move(x); |