1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <utility> 10 11 // template <class T1, class T2> struct pair 12 13 // explicit(see-below) constexpr pair(); 14 15 // NOTE: The SFINAE on the default constructor is tested in 16 // default-sfinae.pass.cpp 17 18 19 #include <utility> 20 #include <type_traits> 21 #include <cassert> 22 23 #include "test_macros.h" 24 #include "archetypes.h" 25 26 int main(int, char**) 27 { 28 { 29 typedef std::pair<float, short*> P; 30 P p; 31 assert(p.first == 0.0f); 32 assert(p.second == nullptr); 33 } 34 #if TEST_STD_VER >= 11 35 { 36 typedef std::pair<float, short*> P; 37 constexpr P p; 38 static_assert(p.first == 0.0f, ""); 39 static_assert(p.second == nullptr, ""); 40 } 41 { 42 using NoDefault = ImplicitTypes::NoDefault; 43 using P = std::pair<int, NoDefault>; 44 static_assert(!std::is_default_constructible<P>::value, ""); 45 using P2 = std::pair<NoDefault, int>; 46 static_assert(!std::is_default_constructible<P2>::value, ""); 47 } 48 { 49 struct Base { }; 50 struct Derived : Base { protected: Derived() = default; }; 51 static_assert(!std::is_default_constructible<std::pair<Derived, int> >::value, ""); 52 } 53 #endif 54 55 return 0; 56 } 57