xref: /llvm-project/libcxx/test/std/containers/container.adaptors/queue/queue.cons/ctor_rcontainer.pass.cpp (revision a11f8b1ad66d68ca0a3a277ce776007abff9c7eb)
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
10 
11 // <queue>
12 
13 // explicit queue(Container&& c = Container()); // before C++20
14 // queue() : queue(Container()) {}              // C++20
15 // explicit queue(Container&& c);               // C++20
16 
17 #include <queue>
18 #include <cassert>
19 
20 #include "test_macros.h"
21 #include "MoveOnly.h"
22 #if TEST_STD_VER >= 11
23 #include "test_convertible.h"
24 #endif
25 
26 template <class C>
27 C
make(int n)28 make(int n)
29 {
30     C c;
31     for (int i = 0; i < n; ++i)
32         c.push_back(MoveOnly(i));
33     return c;
34 }
35 
main(int,char **)36 int main(int, char**)
37 {
38     typedef std::deque<MoveOnly> Container;
39     typedef std::queue<MoveOnly> Q;
40     Q q(make<std::deque<MoveOnly> >(5));
41     assert(q.size() == 5);
42 
43 #if TEST_STD_VER >= 11
44     static_assert(!test_convertible<Q, Container&&>(), "");
45 #endif
46 
47     return 0;
48 }
49