xref: /llvm-project/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_convert_copy.verify.cpp (revision dc71a77d33620830020c939bba25ebdfdd1b6194)
1*dc71a77dSLouis Dionne //===----------------------------------------------------------------------===//
2*dc71a77dSLouis Dionne //
3*dc71a77dSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*dc71a77dSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5*dc71a77dSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*dc71a77dSLouis Dionne //
7*dc71a77dSLouis Dionne //===----------------------------------------------------------------------===//
8*dc71a77dSLouis Dionne 
9*dc71a77dSLouis Dionne // <tuple>
10*dc71a77dSLouis Dionne 
11*dc71a77dSLouis Dionne // template <class... Types> class tuple;
12*dc71a77dSLouis Dionne 
13*dc71a77dSLouis Dionne // template <class Alloc, class ...UTypes>
14*dc71a77dSLouis Dionne //   tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...> const&);
15*dc71a77dSLouis Dionne 
16*dc71a77dSLouis Dionne // UNSUPPORTED: c++03
17*dc71a77dSLouis Dionne 
18*dc71a77dSLouis Dionne #include <tuple>
19*dc71a77dSLouis Dionne #include <memory>
20*dc71a77dSLouis Dionne 
21*dc71a77dSLouis Dionne struct ExplicitCopy {
ExplicitCopyExplicitCopy22*dc71a77dSLouis Dionne   explicit ExplicitCopy(int) {}
ExplicitCopyExplicitCopy23*dc71a77dSLouis Dionne   explicit ExplicitCopy(ExplicitCopy const&) {}
24*dc71a77dSLouis Dionne 
25*dc71a77dSLouis Dionne };
26*dc71a77dSLouis Dionne 
const_explicit_copy_test()27*dc71a77dSLouis Dionne std::tuple<ExplicitCopy> const_explicit_copy_test() {
28*dc71a77dSLouis Dionne     const std::tuple<int> t1(42);
29*dc71a77dSLouis Dionne     return {std::allocator_arg, std::allocator<int>{}, t1};
30*dc71a77dSLouis Dionne     // expected-error@-1 {{chosen constructor is explicit in copy-initialization}}
31*dc71a77dSLouis Dionne }
32*dc71a77dSLouis Dionne 
non_const_explicit_copy_test()33*dc71a77dSLouis Dionne std::tuple<ExplicitCopy> non_const_explicit_copy_test() {
34*dc71a77dSLouis Dionne     std::tuple<int> t1(42);
35*dc71a77dSLouis Dionne     return {std::allocator_arg, std::allocator<int>{}, t1};
36*dc71a77dSLouis Dionne     // expected-error@-1 {{chosen constructor is explicit in copy-initialization}}
37*dc71a77dSLouis Dionne }
38