19795699aSEric Fiselier //===----------------------------------------------------------------------===//
29795699aSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
69795699aSEric Fiselier //
79795699aSEric Fiselier //===----------------------------------------------------------------------===//
89795699aSEric Fiselier 
99795699aSEric Fiselier // <tuple>
109795699aSEric Fiselier 
119795699aSEric Fiselier // template <class... Types> class tuple;
129795699aSEric Fiselier 
139795699aSEric Fiselier // template <class Alloc, class ...UTypes>
149795699aSEric Fiselier //   tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
159795699aSEric Fiselier 
16*31cbe0f2SLouis Dionne // UNSUPPORTED: c++03
179795699aSEric Fiselier 
189795699aSEric Fiselier #include <tuple>
199795699aSEric Fiselier #include <memory>
209795699aSEric Fiselier 
219795699aSEric Fiselier struct ExplicitCopy {
ExplicitCopyExplicitCopy229795699aSEric Fiselier   explicit ExplicitCopy(int) {}
ExplicitCopyExplicitCopy239795699aSEric Fiselier   explicit ExplicitCopy(ExplicitCopy const&) {}
249795699aSEric Fiselier };
259795699aSEric Fiselier 
explicit_move_test()269795699aSEric Fiselier std::tuple<ExplicitCopy> explicit_move_test() {
279795699aSEric Fiselier     std::tuple<int> t1(42);
285b1e5b43SMichael Park     return {std::allocator_arg, std::allocator<int>{}, std::move(t1)};
299795699aSEric Fiselier     // expected-error@-1 {{chosen constructor is explicit in copy-initialization}}
309795699aSEric Fiselier }
319795699aSEric Fiselier 
main(int,char **)322df59c50SJF Bastien int main(int, char**)
339795699aSEric Fiselier {
349795699aSEric Fiselier 
352df59c50SJF Bastien 
362df59c50SJF Bastien   return 0;
379795699aSEric Fiselier }
38