159e26308SLouis Dionne //===----------------------------------------------------------------------===// 259e26308SLouis Dionne // 359e26308SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 459e26308SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 559e26308SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 659e26308SLouis Dionne // 759e26308SLouis Dionne //===----------------------------------------------------------------------===// 859e26308SLouis Dionne 9*31cbe0f2SLouis Dionne // UNSUPPORTED: c++03 1059e26308SLouis Dionne 1159e26308SLouis Dionne // <tuple> 1259e26308SLouis Dionne 1359e26308SLouis Dionne // template <class... Types> class tuple; 1459e26308SLouis Dionne 1559e26308SLouis Dionne // template <class Alloc> 1659e26308SLouis Dionne // explicit(see-below) tuple(allocator_arg_t, const Alloc& a); 1759e26308SLouis Dionne 1859e26308SLouis Dionne // Make sure we get the explicit-ness of the constructor right. 1959e26308SLouis Dionne // This is LWG 3158. 2059e26308SLouis Dionne 2159e26308SLouis Dionne #include <tuple> 2259e26308SLouis Dionne #include <memory> 2359e26308SLouis Dionne 2459e26308SLouis Dionne ExplicitDefaultExplicitDefault2559e26308SLouis Dionnestruct ExplicitDefault { explicit ExplicitDefault() { } }; 2659e26308SLouis Dionne explicit_default_test()2759e26308SLouis Dionnestd::tuple<ExplicitDefault> explicit_default_test() { 2859e26308SLouis Dionne return {std::allocator_arg, std::allocator<int>()}; // expected-error {{chosen constructor is explicit in copy-initialization}} 2959e26308SLouis Dionne } 3059e26308SLouis Dionne main(int,char **)3159e26308SLouis Dionneint main(int, char**) { 3259e26308SLouis Dionne return 0; 3359e26308SLouis Dionne } 34