1ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===//
2ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
3ee226c05af9e0187098f43fb71465a581487af9bDan Austin//                     The LLVM Compiler Infrastructure
4ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
5ee226c05af9e0187098f43fb71465a581487af9bDan Austin// This file is dual licensed under the MIT and the University of Illinois Open
6ee226c05af9e0187098f43fb71465a581487af9bDan Austin// Source Licenses. See LICENSE.TXT for details.
7ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
8ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===//
9ee226c05af9e0187098f43fb71465a581487af9bDan Austin
10ee226c05af9e0187098f43fb71465a581487af9bDan Austin// <tuple>
11ee226c05af9e0187098f43fb71465a581487af9bDan Austin
12ee226c05af9e0187098f43fb71465a581487af9bDan Austin// template <class... Types> class tuple;
13ee226c05af9e0187098f43fb71465a581487af9bDan Austin
14ee226c05af9e0187098f43fb71465a581487af9bDan Austin// template <class Alloc, class ...UTypes>
15ee226c05af9e0187098f43fb71465a581487af9bDan Austin//   tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
16ee226c05af9e0187098f43fb71465a581487af9bDan Austin
17ee226c05af9e0187098f43fb71465a581487af9bDan Austin// UNSUPPORTED: c++98, c++03
18ee226c05af9e0187098f43fb71465a581487af9bDan Austin
19ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <tuple>
20ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <memory>
21ee226c05af9e0187098f43fb71465a581487af9bDan Austin
22ee226c05af9e0187098f43fb71465a581487af9bDan Austinstruct ExplicitCopy {
23ee226c05af9e0187098f43fb71465a581487af9bDan Austin  explicit ExplicitCopy(int) {}
24ee226c05af9e0187098f43fb71465a581487af9bDan Austin  explicit ExplicitCopy(ExplicitCopy const&) {}
25ee226c05af9e0187098f43fb71465a581487af9bDan Austin};
26ee226c05af9e0187098f43fb71465a581487af9bDan Austin
27ee226c05af9e0187098f43fb71465a581487af9bDan Austinstd::tuple<ExplicitCopy> explicit_move_test() {
28ee226c05af9e0187098f43fb71465a581487af9bDan Austin    std::tuple<int> t1(42);
29ee226c05af9e0187098f43fb71465a581487af9bDan Austin    return {std::allocator_arg, std::allocator<void>{}, std::move(t1)};
30ee226c05af9e0187098f43fb71465a581487af9bDan Austin    // expected-error@-1 {{chosen constructor is explicit in copy-initialization}}
31ee226c05af9e0187098f43fb71465a581487af9bDan Austin}
32ee226c05af9e0187098f43fb71465a581487af9bDan Austin
33ee226c05af9e0187098f43fb71465a581487af9bDan Austinint main()
34ee226c05af9e0187098f43fb71465a581487af9bDan Austin{
35ee226c05af9e0187098f43fb71465a581487af9bDan Austin
36ee226c05af9e0187098f43fb71465a581487af9bDan Austin}
37