diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2023-04-04 20:28:59 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2023-04-05 11:37:19 +0100 |
commit | 44e17b8d8999a658af9f86681504d74a119a5f6f (patch) | |
tree | 602bcfcfe3848a3a61bdbfe1163cfc7883037273 /libstdc++-v3/testsuite/28_regex | |
parent | fdc5abbdcfb65d415af6c40230f8f07872e51e49 (diff) | |
download | gcc-44e17b8d8999a658af9f86681504d74a119a5f6f.zip gcc-44e17b8d8999a658af9f86681504d74a119a5f6f.tar.gz gcc-44e17b8d8999a658af9f86681504d74a119a5f6f.tar.bz2 |
libstdc++: Define std::sub_match::swap member function (LWG 3204)
This was approved at the C++ meeting in February.
libstdc++-v3/ChangeLog:
* include/bits/regex.h (sub_match::swap): New function.
* testsuite/28_regex/sub_match/lwg3204.cc: New test.
Diffstat (limited to 'libstdc++-v3/testsuite/28_regex')
-rw-r--r-- | libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc b/libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc new file mode 100644 index 0000000..58ef0df --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc @@ -0,0 +1,38 @@ +// { dg-do run { target c++11 } } +#include <regex> +#include <testsuite_hooks.h> + +// LWG 3204. sub_match::swap only swaps the base class + +int main() +{ + std::sub_match<const char*> a, b; + a.matched = true; + a.swap(b); + VERIFY( ! a.matched ); + VERIFY( b.matched ); +} + +struct iter +{ + using value_type = char; + using difference_type = long; + using pointer = const char*; + using reference = const char&; + using iterator_category = std::bidirectional_iterator_tag; + + iter(); + iter(const iter&) noexcept(false); + + iter& operator++(); + iter operator++(int); + iter& operator--(); + iter operator--(int); + reference operator*() const; + pointer operator->() const; +}; + +using CS = std::csub_match; +static_assert( noexcept(std::declval<CS&>().swap(std::declval<CS&>())) ); +using IS = std::sub_match<iter>; +static_assert( ! noexcept(std::declval<IS&>().swap(std::declval<IS&>())) ); |