aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2021-11-26 22:53:02 +0000
committerJonathan Wakely <jwakely@redhat.com>2021-11-26 22:56:51 +0000
commit52b769437a4d1ca50f4ef5bdad65b12115ded845 (patch)
tree7f87f82863ae8686837d9b06093e6bb0da66db5d
parent33adfd0d42e54c809b0c53212abe66e8c874b2f8 (diff)
downloadgcc-52b769437a4d1ca50f4ef5bdad65b12115ded845.zip
gcc-52b769437a4d1ca50f4ef5bdad65b12115ded845.tar.gz
gcc-52b769437a4d1ca50f4ef5bdad65b12115ded845.tar.bz2
libstdc++: Fix test that fails in C++20 mode
This test was written to verify that the LWG 3265 changes work. But those changes were superseded by LWG 3435, and the test is now incorrect according to the current draft. The assignment operator is now constrained to also require convertibility, which makes the test fail. Change the Iter type to be convertible from int*, but make it throw an exception if that conversion is used. Change the test from compile-only to run, so we verify that the exception isn't thrown. libstdc++-v3/ChangeLog: * testsuite/24_iterators/move_iterator/dr3265.cc: Fix test to account for LWG 3435 resolution.
-rw-r--r--libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc25
1 files changed, 15 insertions, 10 deletions
diff --git a/libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc b/libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc
index e4219b8..3ce0df5 100644
--- a/libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc
+++ b/libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-do compile { target c++11 } }
+// { dg-do run { target c++11 } }
#include <iterator>
@@ -27,18 +27,18 @@ struct Iter
using reference = int&;
using difference_type = std::ptrdiff_t;
- Iter();
+ Iter() { }
- // Construction from int* is not valid:
- Iter(int*) = delete;
+ // Construction from int* should not be used:
+ Iter(int*) { throw 1; }
- // Assignment from int* is valid:
- Iter& operator=(int*);
+ // Assignment from int* is OK:
+ Iter& operator=(int*) { return *this; }
- Iter& operator++();
- Iter operator++(int);
- int& operator*() const;
- int* operator->() const;
+ Iter& operator++() { return *this; }
+ Iter operator++(int) { return *this; }
+ int& operator*() const { static int i; return i; }
+ int* operator->() const { return &**this; }
template<int N> friend bool operator==(Iter, Iter);
};
@@ -49,3 +49,8 @@ void test01()
int i = 0;
m = std::make_move_iterator(&i); // Should use assignment not construction
}
+
+int main()
+{
+ test01();
+}