//===----------------------------------------------------------------------===//
//
// 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 InputIterator>
// priority_queue(InputIterator first, InputIterator last, const Compare& = Compare());
// template <class InputIterator>
// priority_queue(InputIterator first, InputIterator last, const Compare&, const Container&);
// template <class InputIterator>
// priority_queue(InputIterator first, InputIterator last, const Compare&, Container&&);
// template <class InputIterator>
// priority_queue(InputIterator first, InputIterator last, const Alloc&);
// template <class InputIterator>
// priority_queue(InputIterator first, InputIterator last, const Compare&, const Alloc&);
// template <class InputIterator>
// priority_queue(InputIterator first, InputIterator last, const Compare&, const Container&, const Alloc&);
// template <class InputIterator>
// priority_queue(InputIterator first, InputIterator last, const Compare&, Container&&, const Alloc&);
#include <queue>
#include <type_traits>
#include <vector>
// Sanity-check that std::vector is constructible from two ints...
static_assert( std::is_constructible<std::vector<int>, int*, int*>::value, "");
static_assert( std::is_constructible<std::vector<int>, int , int >::value, "");
// ...but std::priority_queue is not.
static_assert( std::is_constructible<std::priority_queue<int>, int*, int*>::value, "");
static_assert(!std::is_constructible<std::priority_queue<int>, int , int >::value, "");
static_assert( std::is_constructible<std::priority_queue<int>, int*, int*, std::less<int>>::value, "");
static_assert(!std::is_constructible<std::priority_queue<int>, int , int , std::less<int>>::value, "");
static_assert( std::is_constructible<std::priority_queue<int>, int*, int*, std::less<int>, std::vector<int>>::value, "");
static_assert(!std::is_constructible<std::priority_queue<int>, int , int , std::less<int>, std::vector<int>>::value, "");
static_assert( std::is_constructible<std::priority_queue<int>, int*, int*, std::less<int>, std::vector<int>&>::value, "");
static_assert(!std::is_constructible<std::priority_queue<int>, int , int , std::less<int>, std::vector<int>&>::value, "");
static_assert( std::is_constructible<std::priority_queue<int>, int*, int*, std::allocator<int>>::value, "");
static_assert(!std::is_constructible<std::priority_queue<int>, int , int , std::allocator<int>>::value, "");
static_assert( std::is_constructible<std::priority_queue<int>, int*, int*, std::less<int>, std::allocator<int>>::value, "");
static_assert(!std::is_constructible<std::priority_queue<int>, int , int , std::less<int>, std::allocator<int>>::value, "");
static_assert( std::is_constructible<std::priority_queue<int>, int*, int*, std::less<int>, std::vector<int>, std::allocator<int>>::value, "");
static_assert(!std::is_constructible<std::priority_queue<int>, int , int , std::less<int>, std::vector<int>, std::allocator<int>>::value, "");
static_assert( std::is_constructible<std::priority_queue<int>, int*, int*, std::less<int>, std::vector<int>&, std::allocator<int>>::value, "");
static_assert(!std::is_constructible<std::priority_queue<int>, int , int , std::less<int>, std::vector<int>&, std::allocator<int>>::value, "");