]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/23_containers/multimap/cons/deduction.cc
2f9373a5befd092a076a814484dc6ce3538a0258
1 // { dg-options "-std=gnu++17" }
2 // { dg-do compile { target c++17 } }
5 #include <testsuite_allocator.h>
6 #include <testsuite_iterators.h>
8 using __gnu_test::SimpleAllocator
;
9 using value_type
= std::multimap
<int, double>::value_type
;
11 static_assert(std::is_same_v
<
12 decltype(std::multimap
{value_type
{1, 2.0}, {2, 3.0}, {3, 4.0}}),
13 std::multimap
<int, double>>);
15 static_assert(std::is_same_v
<
16 decltype(std::multimap
{std::pair
{1, 2.0}, {2, 3.0}, {3, 4.0}}),
17 std::multimap
<int, double>>);
19 static_assert(std::is_same_v
<
20 decltype(std::multimap
{{value_type
{1, 2.0}, {2, 3.0}, {3, 4.0}}}),
21 std::multimap
<int, double>>);
23 static_assert(std::is_same_v
<
24 decltype(std::multimap
{{std::pair
{1, 2.0}, {2, 3.0}, {3, 4.0}}}),
25 std::multimap
<int, double>>);
27 static_assert(std::is_same_v
<
28 decltype(std::multimap
{{value_type
{1, 2.0}, {2, 3.0}, {3, 4.0}},
29 std::less
<int>{}, {}}),
30 std::multimap
<int, double>>);
32 static_assert(std::is_same_v
<
33 decltype(std::multimap
{{std::pair
{1, 2.0}, {2, 3.0}, {3, 4.0}},
34 std::less
<int>{}, {}}),
35 std::multimap
<int, double>>);
37 /* This is not deducible, {} could be deduced as _Compare or _Allocator.
38 static_assert(std::is_same_v<
39 decltype(std::multimap{{value_type{1, 2.0}, {2, 3.0}, {3, 4.0}},
41 std::multimap<int, double>>);
44 static_assert(std::is_same_v
<
45 decltype(std::multimap
{{std::pair
{1, 2.0}, {2, 3.0}, {3, 4.0}},
47 std::multimap
<int, double>>);
49 static_assert(std::is_same_v
<
50 decltype(std::multimap
{{value_type
{1, 2.0}, {2, 3.0}, {3, 4.0}},
51 {}, SimpleAllocator
<value_type
>{}}),
52 std::multimap
<int, double, std::less
<int>,
53 SimpleAllocator
<value_type
>>>);
55 static_assert(std::is_same_v
<
56 decltype(std::multimap
{{std::pair
{1, 2.0}, {2, 3.0}, {3, 4.0}},
57 {}, SimpleAllocator
<value_type
>{}}),
58 std::multimap
<int, double, std::less
<int>,
59 SimpleAllocator
<value_type
>>>);
63 std::multimap
<int, double> x
;
64 static_assert(std::is_same_v
<
65 decltype(std::multimap(x
.begin(), x
.end())),
66 std::multimap
<int, double>>);
68 static_assert(std::is_same_v
<
69 decltype(std::multimap
{x
.begin(), x
.end(),
71 std::allocator
<value_type
>{}}),
72 std::multimap
<int, double>>);
74 static_assert(std::is_same_v
<
75 decltype(std::multimap
{x
.begin(), x
.end(),
76 std::less
<int>{}, {}}),
77 std::multimap
<int, double>>);
79 static_assert(std::is_same_v
<
80 decltype(std::multimap(x
.begin(), x
.end(),
82 std::multimap
<int, double>>);
84 static_assert(std::is_same_v
<
85 decltype(std::multimap
{x
.begin(), x
.end(),
87 std::allocator
<value_type
>{}}),
88 std::multimap
<int, double>>);
90 static_assert(std::is_same_v
<
91 decltype(std::multimap
{x
.begin(), x
.end(),
93 SimpleAllocator
<value_type
>{}}),
94 std::multimap
<int, double, std::less
<int>,
95 SimpleAllocator
<value_type
>>>);
98 using __gnu_test::test_container
;
99 using __gnu_test::input_iterator_wrapper
;
104 test_container
<value_type
, input_iterator_wrapper
> x(array
);
106 static_assert(std::is_same_v
<
107 decltype(std::multimap(x
.begin(), x
.end())),
108 std::multimap
<int, double>>);
110 static_assert(std::is_same_v
<
111 decltype(std::multimap
{x
.begin(), x
.end(),
113 std::allocator
<value_type
>{}}),
114 std::multimap
<int, double>>);
116 static_assert(std::is_same_v
<
117 decltype(std::multimap
{x
.begin(), x
.end(),
118 std::less
<int>{}, {}}),
119 std::multimap
<int, double>>);
121 static_assert(std::is_same_v
<
122 decltype(std::multimap(x
.begin(), x
.end(),
124 std::multimap
<int, double>>);
126 static_assert(std::is_same_v
<
127 decltype(std::multimap
{x
.begin(), x
.end(),
129 std::allocator
<value_type
>{}}),
130 std::multimap
<int, double>>);
132 static_assert(std::is_same_v
<
133 decltype(std::multimap
{x
.begin(), x
.end(),
135 SimpleAllocator
<value_type
>{}}),
136 std::multimap
<int, double, std::less
<int>,
137 SimpleAllocator
<value_type
>>>);
142 std::pair
<int, double> array
[1];
143 test_container
<std::pair
<int, double>, input_iterator_wrapper
> x(array
);
145 static_assert(std::is_same_v
<
146 decltype(std::multimap(x
.begin(), x
.end())),
147 std::multimap
<int, double>>);
149 static_assert(std::is_same_v
<
150 decltype(std::multimap
{x
.begin(), x
.end(),
152 std::allocator
<value_type
>{}}),
153 std::multimap
<int, double>>);
155 static_assert(std::is_same_v
<
156 decltype(std::multimap
{x
.begin(), x
.end(),
157 std::less
<int>{}, {}}),
158 std::multimap
<int, double>>);
160 static_assert(std::is_same_v
<
161 decltype(std::multimap(x
.begin(), x
.end(),
163 std::multimap
<int, double>>);
165 static_assert(std::is_same_v
<
166 decltype(std::multimap
{x
.begin(), x
.end(),
168 std::allocator
<value_type
>{}}),
169 std::multimap
<int, double>>);
171 static_assert(std::is_same_v
<
172 decltype(std::multimap
{x
.begin(), x
.end(),
174 SimpleAllocator
<value_type
>{}}),
175 std::multimap
<int, double, std::less
<int>,
176 SimpleAllocator
<value_type
>>>);