1e16f2cb6SLouis Dionne //===----------------------------------------------------------------------===// 2e16f2cb6SLouis Dionne // 3e16f2cb6SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e16f2cb6SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5e16f2cb6SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e16f2cb6SLouis Dionne // 7e16f2cb6SLouis Dionne //===----------------------------------------------------------------------===// 8e16f2cb6SLouis Dionne 9*31cbe0f2SLouis Dionne // UNSUPPORTED: c++03 10e16f2cb6SLouis Dionne 11e16f2cb6SLouis Dionne // <utility> 12e16f2cb6SLouis Dionne 13e16f2cb6SLouis Dionne // template <class T1, class T2> struct pair 14e16f2cb6SLouis Dionne 15e16f2cb6SLouis Dionne // explicit(see-below) constexpr pair(); 16e16f2cb6SLouis Dionne 17e16f2cb6SLouis Dionne // This test checks the conditional explicitness of std::pair's default 18e16f2cb6SLouis Dionne // constructor as introduced by the resolution of LWG 2510. 19e16f2cb6SLouis Dionne 20e16f2cb6SLouis Dionne #include <utility> 21e16f2cb6SLouis Dionne 22e16f2cb6SLouis Dionne 23e16f2cb6SLouis Dionne struct ImplicitlyDefaultConstructible { 24e16f2cb6SLouis Dionne ImplicitlyDefaultConstructible() = default; 25e16f2cb6SLouis Dionne }; 26e16f2cb6SLouis Dionne 27e16f2cb6SLouis Dionne struct ExplicitlyDefaultConstructible { 28e16f2cb6SLouis Dionne explicit ExplicitlyDefaultConstructible() = default; 29e16f2cb6SLouis Dionne }; 30e16f2cb6SLouis Dionne test1()31e16f2cb6SLouis Dionnestd::pair<ImplicitlyDefaultConstructible, ExplicitlyDefaultConstructible> test1() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}} test2()32e16f2cb6SLouis Dionnestd::pair<ExplicitlyDefaultConstructible, ImplicitlyDefaultConstructible> test2() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}} test3()33e16f2cb6SLouis Dionnestd::pair<ExplicitlyDefaultConstructible, ExplicitlyDefaultConstructible> test3() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}} test4()34e16f2cb6SLouis Dionnestd::pair<ImplicitlyDefaultConstructible, ImplicitlyDefaultConstructible> test4() { return {}; } 35e16f2cb6SLouis Dionne main(int,char **)36e16f2cb6SLouis Dionneint main(int, char**) { 37e16f2cb6SLouis Dionne return 0; 38e16f2cb6SLouis Dionne } 39