aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-06-01 18:30:47 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-06-01 18:30:47 +0100
commit118158b646d402b0fb5d760e4827611b731fe6f3 (patch)
tree07b8f3cbd2c5b69da2987547c43a96e3b751ef51 /libstdc++-v3
parent1746d5f3e67703a5b6a3a4fd8ca625672c321313 (diff)
downloadgcc-118158b646d402b0fb5d760e4827611b731fe6f3.zip
gcc-118158b646d402b0fb5d760e4827611b731fe6f3.tar.gz
gcc-118158b646d402b0fb5d760e4827611b731fe6f3.tar.bz2
libstdc++: Fix __gnu_test::input_iterator_wrapper::operator++(int)
I noticed recently that our input_iterator_wrapper utility for writing tests has the following post-increment operator: void operator++(int) { ++*this; } That fails to meet the Cpp17InputIterator requirement that *r++ is valid. This change makes it return a non-void proxy type that can be deferenced to produce another proxy, which is convertible to the value_type. The second proxy converts to const T& to ensure it can't be written to. * testsuite/util/testsuite_iterators.h: (input_iterator_wrapper::operator++(int)): Return proxy object.
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_iterators.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/libstdc++-v3/testsuite/util/testsuite_iterators.h b/libstdc++-v3/testsuite/util/testsuite_iterators.h
index 5be47f4..71b672c 100644
--- a/libstdc++-v3/testsuite/util/testsuite_iterators.h
+++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h
@@ -208,6 +208,17 @@ namespace __gnu_test
: public std::iterator<std::input_iterator_tag, typename remove_cv<T>::type,
std::ptrdiff_t, T*, T&>
{
+ struct post_inc_proxy
+ {
+ struct deref_proxy
+ {
+ T* ptr;
+ operator const T&() const { return *ptr; }
+ } p;
+
+ deref_proxy operator*() const { return p; }
+ };
+
protected:
input_iterator_wrapper() : ptr(0), SharedInfo(0)
{ }
@@ -266,10 +277,12 @@ namespace __gnu_test
return *this;
}
- void
+ post_inc_proxy
operator++(int)
{
+ post_inc_proxy tmp = { { ptr } };
++*this;
+ return tmp;
}
#if __cplusplus >= 201103L