xref: /llvm-project/libcxx/test/std/containers/container.adaptors/stack/stack.cons/deduct.verify.cpp (revision 9c4a716c1292096fcbdf415b63b7b0122b03310f)
1b82dcb62SLouis Dionne //===----------------------------------------------------------------------===//
2b82dcb62SLouis Dionne //
3b82dcb62SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4b82dcb62SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5b82dcb62SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b82dcb62SLouis Dionne //
7b82dcb62SLouis Dionne //===----------------------------------------------------------------------===//
8b82dcb62SLouis Dionne 
9b82dcb62SLouis Dionne // <stack>
10b82dcb62SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14
11b82dcb62SLouis Dionne 
12b82dcb62SLouis Dionne // template <class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
13b82dcb62SLouis Dionne //    vector(InputIterator, InputIterator, Allocator = Allocator())
14b82dcb62SLouis Dionne //    -> vector<typename iterator_traits<InputIterator>::value_type, Allocator>;
15b82dcb62SLouis Dionne //
16b82dcb62SLouis Dionne 
17b82dcb62SLouis Dionne 
18b82dcb62SLouis Dionne #include <stack>
19b82dcb62SLouis Dionne #include <list>
20b82dcb62SLouis Dionne #include <iterator>
21b82dcb62SLouis Dionne #include <cassert>
22b82dcb62SLouis Dionne #include <cstddef>
23b82dcb62SLouis Dionne 
24b82dcb62SLouis Dionne 
main(int,char **)25b82dcb62SLouis Dionne int main(int, char**)
26b82dcb62SLouis Dionne {
27b82dcb62SLouis Dionne //  Test the explicit deduction guides
28b82dcb62SLouis Dionne     {
29b82dcb62SLouis Dionne //  stack(const Container&, const Alloc&);
30b82dcb62SLouis Dionne //  The '45' is not an allocator
31*9c4a716cSMatheus Izvekov     std::stack stk(std::list<int>({1,2,3}), 45);  // expected-error-re {{no viable constructor or deduction guide for deduction of template arguments of '{{(std::)?}}stack'}}
32b82dcb62SLouis Dionne     }
33b82dcb62SLouis Dionne 
34b82dcb62SLouis Dionne     {
35b82dcb62SLouis Dionne //  stack(const stack&, const Alloc&);
36b82dcb62SLouis Dionne //  The '45' is not an allocator
37b82dcb62SLouis Dionne     std::stack<int> source;
38*9c4a716cSMatheus Izvekov     std::stack stk(source, 45);  // expected-error-re {{no viable constructor or deduction guide for deduction of template arguments of '{{(std::)?}}stack'}}
39b82dcb62SLouis Dionne     }
40b82dcb62SLouis Dionne 
41b82dcb62SLouis Dionne //  Test the implicit deduction guides
42b82dcb62SLouis Dionne     {
43b82dcb62SLouis Dionne //  stack (allocator &)
44*9c4a716cSMatheus Izvekov     std::stack stk((std::allocator<int>()));  // expected-error-re {{no viable constructor or deduction guide for deduction of template arguments of '{{(std::)?}}stack'}}
45b82dcb62SLouis Dionne //  Note: The extra parens are necessary, since otherwise clang decides it is a function declaration.
46b82dcb62SLouis Dionne //  Also, we can't use {} instead of parens, because that constructs a
47b82dcb62SLouis Dionne //      stack<allocator<int>, allocator<allocator<int>>>
48b82dcb62SLouis Dionne     }
49b82dcb62SLouis Dionne 
50b82dcb62SLouis Dionne 
51b82dcb62SLouis Dionne   return 0;
52b82dcb62SLouis Dionne }
53