xref: /llvm-project/libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_map_synop.pass.cpp (revision 2da049a1418f7a2f96e7cac4368cac3ce8667d2e)
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // UNSUPPORTED: c++03, c++11, c++14
10 // TODO: Change to XFAIL once https://github.com/llvm/llvm-project/issues/40340 is fixed
11 // UNSUPPORTED: availability-pmr-missing
12 
13 // <map>
14 
15 // namespace std::pmr {
16 // template <class K, class V, class Compare = less<Key> >
17 // using map =
18 //     ::std::map<K, V, Compare, polymorphic_allocator<pair<const K, V>>>
19 //
20 // template <class K, class V, class Compare = less<Key> >
21 // using multimap =
22 //     ::std::multimap<K, V, Compare, polymorphic_allocator<pair<const K, V>>>
23 //
24 // } // namespace std::pmr
25 
26 #include <map>
27 #include <memory_resource>
28 #include <type_traits>
29 #include <cassert>
30 
main(int,char **)31 int main(int, char**) {
32   using K  = int;
33   using V  = char;
34   using DC = std::less<int>;
35   using OC = std::greater<int>;
36   using P  = std::pair<const K, V>;
37   {
38     using StdMap = std::map<K, V, DC, std::pmr::polymorphic_allocator<P>>;
39     using PmrMap = std::pmr::map<K, V>;
40     static_assert(std::is_same<StdMap, PmrMap>::value, "");
41   }
42   {
43     using StdMap = std::map<K, V, OC, std::pmr::polymorphic_allocator<P>>;
44     using PmrMap = std::pmr::map<K, V, OC>;
45     static_assert(std::is_same<StdMap, PmrMap>::value, "");
46   }
47   {
48     std::pmr::map<int, int> m;
49     assert(m.get_allocator().resource() == std::pmr::get_default_resource());
50   }
51   {
52     using StdMap = std::multimap<K, V, DC, std::pmr::polymorphic_allocator<P>>;
53     using PmrMap = std::pmr::multimap<K, V>;
54     static_assert(std::is_same<StdMap, PmrMap>::value, "");
55   }
56   {
57     using StdMap = std::multimap<K, V, OC, std::pmr::polymorphic_allocator<P>>;
58     using PmrMap = std::pmr::multimap<K, V, OC>;
59     static_assert(std::is_same<StdMap, PmrMap>::value, "");
60   }
61   {
62     std::pmr::multimap<int, int> m;
63     assert(m.get_allocator().resource() == std::pmr::get_default_resource());
64   }
65 
66   return 0;
67 }
68