| // { dg-do run { target c++11 } } |
| |
| #include <queue> |
| #include <testsuite_hooks.h> |
| #include <testsuite_allocator.h> |
| |
| void |
| test_lwg3506() |
| { |
| // LWG 3506 Missing allocator-extended constructors for priority_queue |
| |
| using Alloc = __gnu_test::uneq_allocator<int>; |
| |
| using Container = std::vector<int, Alloc>; |
| |
| struct Queue : std::priority_queue<int, Container> |
| { |
| using priority_queue::priority_queue; |
| |
| Alloc get_allocator() const { return c.get_allocator(); } |
| }; |
| |
| using Compare = Queue::value_compare; |
| |
| const Alloc a1(1), a2(2), a3(3), a4(4); |
| const int vals[] = { 5, 3, 9, 1, 7 }; |
| Container cont({ 20, 30, 40 }, Alloc(99)); |
| |
| Queue q1(vals, vals+5, a1); |
| VERIFY( q1.get_allocator() == a1 ); |
| VERIFY( q1.size() == 5 ); |
| VERIFY( q1.top() == 9 ); |
| |
| Queue q2(vals, vals+5, Compare(), a2); |
| VERIFY( q2.get_allocator() == a2 ); |
| VERIFY( q2.size() == 5 ); |
| VERIFY( q2.top() == 9 ); |
| |
| Queue q3(vals, vals+5, Compare(), cont, a3); |
| VERIFY( q3.get_allocator() == a3 ); |
| VERIFY( q3.size() == 8 ); |
| VERIFY( q3.top() == 40 ); |
| |
| Queue q4(vals, vals+5, Compare(), std::move(cont), a4); |
| VERIFY( q4.get_allocator() == a4 ); |
| VERIFY( q4.size() == 8 ); |
| VERIFY( q4.top() == 40 ); |
| VERIFY( cont.empty() ); |
| } |
| |
| int main() |
| { |
| test_lwg3506(); |
| } |