1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// UNSUPPORTED: c++98, c++03
11
12// <queue>
13
14// template <class... Args> reference emplace(Args&&... args);
15// return type is 'reference' in C++17; 'void' before
16
17
18#include <queue>
19#include <cassert>
20
21#include "test_macros.h"
22
23#include "../../../Emplaceable.h"
24
25int main()
26{
27    typedef Emplaceable T;
28    std::queue<Emplaceable> q;
29#if TEST_STD_VER > 14
30    T& r1 = q.emplace(1, 2.5);
31    assert(&r1 == &q.back());
32    T& r2 = q.emplace(2, 3.5);
33    assert(&r2 == &q.back());
34    T& r3 = q.emplace(3, 4.5);
35    assert(&r3 == &q.back());
36    assert(&r1 == &q.front());
37#else
38    q.emplace(1, 2.5);
39    q.emplace(2, 3.5);
40    q.emplace(3, 4.5);
41#endif
42
43    assert(q.size() == 3);
44    assert(q.front() == Emplaceable(1, 2.5));
45    assert(q.back() == Emplaceable(3, 4.5));
46}
47