1// { dg-do compile } 2// { dg-options "-std=gnu++11" } 3 4// Copyright (C) 2010-2015 Free Software Foundation, Inc. 5// 6// This file is part of the GNU ISO C++ Library. This library is free 7// software; you can redistribute it and/or modify it under the 8// terms of the GNU General Public License as published by the 9// Free Software Foundation; either version 3, or (at your option) 10// any later version. 11 12// This library is distributed in the hope that it will be useful, 13// but WITHOUT ANY WARRANTY; without even the implied warranty of 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15// GNU General Public License for more details. 16 17// You should have received a copy of the GNU General Public License along 18// with this library; see the file COPYING3. If not see 19// <http://www.gnu.org/licenses/>. 20 21#include <memory> 22#include <testsuite_common_types.h> 23 24#include <iostream> 25 26// 2 element tuple 27int main() 28{ 29 typedef std::tuple<int, int> tuple_type; 30 31 // 01: default ctor 32 __gnu_test::constexpr_default_constructible test1; 33 test1.operator()<tuple_type>(); 34 35 // 02: default copy ctor 36 __gnu_test::constexpr_single_value_constructible test2; 37 test2.operator()<tuple_type, tuple_type>(); 38 39 // 03: element move ctor, single element 40 const int i1(415); 41 constexpr tuple_type t2 { 44, std::move(i1) }; 42 43 // 04: element move ctor, two element 44 const int i2(510); 45 const int i3(408); 46 constexpr tuple_type t4 { std::move(i2), std::move(i3) }; 47 48 // 05: value-type conversion constructor 49 const int i4(650); 50 const int i5(310); 51 constexpr tuple_type t8(i4, i5); 52 53 // 06: pair conversion ctor 54 test2.operator()<tuple_type, std::pair<int, int>>(); 55 test2.operator()<std::tuple<short, short>, std::pair<int, int>>(); 56 test2.operator()<tuple_type, std::pair<short, short>>(); 57 58 // 07: different-tuple-type conversion constructor 59 test2.operator()<tuple_type, std::tuple<short, short>>(); 60 test2.operator()<std::tuple<short, short>, tuple_type>(); 61 62 return 0; 63} 64