//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// UNSUPPORTED: c++03

// <queue>

// template <class... Args> decltype(auto) emplace(Args&&... args);
// return type is 'decltype(auto)' in C++17; 'void' before
// whatever the return type of the underlying container's emplace_back() returns.


#include <queue>
#include <cassert>
#include <list>

#include "test_macros.h"

#include "../../../Emplaceable.h"

template <typename Queue>
void test_return_type() {
    typedef typename Queue::container_type Container;
    typedef typename Container::value_type value_type;
    typedef decltype(std::declval<Queue>().emplace(std::declval<value_type &>())) queue_return_type;

#if TEST_STD_VER > 14
    typedef decltype(std::declval<Container>().emplace_back(std::declval<value_type>())) container_return_type;
    static_assert(std::is_same<queue_return_type, container_return_type>::value, "");
#else
    static_assert(std::is_same<queue_return_type, void>::value, "");
#endif
}

int main(int, char**)
{
    test_return_type<std::queue<int> > ();
    test_return_type<std::queue<int, std::list<int> > > ();

    std::queue<Emplaceable> q;
#if TEST_STD_VER > 14
    typedef Emplaceable T;
    T& r1 = q.emplace(1, 2.5);
    assert(&r1 == &q.back());
    T& r2 = q.emplace(2, 3.5);
    assert(&r2 == &q.back());
    T& r3 = q.emplace(3, 4.5);
    assert(&r3 == &q.back());
    assert(&r1 == &q.front());
#else
    q.emplace(1, 2.5);
    q.emplace(2, 3.5);
    q.emplace(3, 4.5);
#endif

    assert(q.size() == 3);
    assert(q.front() == Emplaceable(1, 2.5));
    assert(q.back() == Emplaceable(3, 4.5));

  return 0;
}
