diff options
author | Tomasz Kamiński <tkaminsk@redhat.com> | 2025-03-18 16:10:48 +0100 |
---|---|---|
committer | Tomasz Kamiński <tkaminsk@redhat.com> | 2025-03-19 13:52:32 +0100 |
commit | 64f5c854597759fd11648b7d9e3884b8c69f218f (patch) | |
tree | 8a5845931797757d92905e108908c44e0d5e068b /libstdc++-v3/testsuite/std/ranges | |
parent | 73987e69d1b24e3807b94ec7cf5d859b93b9ae78 (diff) | |
download | gcc-64f5c854597759fd11648b7d9e3884b8c69f218f.zip gcc-64f5c854597759fd11648b7d9e3884b8c69f218f.tar.gz gcc-64f5c854597759fd11648b7d9e3884b8c69f218f.tar.bz2 |
libstdc++-v3: Implement allocator-aware from_range_t constructors for unordered containers.
This patch implements part of LWG2713 covering the from_range
constructors, which makes std::ranges::to<std::unordered_set>(alloc)
well-formed. Likewise for rest of unordered containers.
As this consturctors were added to v15, this has no impact
on code that compiled with previous versions.
libstdc++-v3/ChangeLog:
* include/bits/unordered_map.h
(unordered_map(from_range_t, _Rg&&, const allocator_type&))
(unordered_multimap(from_range_t, _Rg&&, const allocator_type&)):
Define.
* include/bits/unordered_set.h
(unordered_set(from_range_t, _Rg&&, const allocator_type&))
(unordered_multiset(from_range_t, _Rg&&, const allocator_type&)):
Define.
* testsuite/23_containers/unordered_map/cons/from_range.cc: New tests.
New tests.
* testsuite/23_containers/unordered_multimap/cons/from_range.cc:
New tests.
* testsuite/23_containers/unordered_multiset/cons/from_range.cc:
New tests.
* testsuite/23_containers/unordered_set/cons/from_range.cc: New tests.
* testsuite/std/ranges/conv/1.cc: New tests.
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
Diffstat (limited to 'libstdc++-v3/testsuite/std/ranges')
-rw-r--r-- | libstdc++-v3/testsuite/std/ranges/conv/1.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/std/ranges/conv/1.cc b/libstdc++-v3/testsuite/std/ranges/conv/1.cc index 231cb9d..2caa1b8 100644 --- a/libstdc++-v3/testsuite/std/ranges/conv/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/conv/1.cc @@ -12,6 +12,7 @@ #include <testsuite_hooks.h> #include <testsuite_allocator.h> #include <testsuite_iterators.h> +#include <unordered_map> void test_p1206r7_examples() @@ -478,6 +479,26 @@ test_pr119282() return true; } +void +test_lwg2713() +{ + using Alloc = __gnu_test::uneq_allocator<std::pair<const int, const char*>>; + const Alloc alloc(303); + const std::map<int, const char*> m{{1, "one"}, {2, "two"}, {3, "three"}}; + namespace ranges = std::ranges; + + // Call constructors with bucket count + auto m1 = m | ranges::to<std::unordered_map>(0, alloc); + VERIFY( m1.get_allocator() == alloc ); + auto m2 = m | ranges::to<std::unordered_multimap>(0, alloc); + VERIFY( m2.get_allocator() == alloc ); + // These call constructors added in lwg2713 + auto m3 = m | ranges::to<std::unordered_map>(alloc); + VERIFY( m3.get_allocator() == alloc ); + auto m4 = m | ranges::to<std::unordered_multimap>(alloc); + VERIFY( m4.get_allocator() == alloc ); +} + int main() { test_p1206r7_examples(); @@ -487,6 +508,7 @@ int main() test_2_1_3(); test_2_1_4(); test_2_2(); + test_lwg2713(); test_lwg3984(); test_nodiscard(); test_constexpr(); |