1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <tuple>
11
12 // template <class... Types> class tuple;
13
14 // explicit tuple(const T&...);
15
16 #include <tuple>
17 #include <string>
18 #include <cassert>
19
main()20 int main()
21 {
22 {
23 std::tuple<int> t(2);
24 assert(std::get<0>(t) == 2);
25 }
26 #if _LIBCPP_STD_VER > 11
27 {
28 constexpr std::tuple<int> t(2);
29 static_assert(std::get<0>(t) == 2, "");
30 }
31 {
32 constexpr std::tuple<int> t;
33 static_assert(std::get<0>(t) == 0, "");
34 }
35 #endif
36 {
37 std::tuple<int, char*> t(2, 0);
38 assert(std::get<0>(t) == 2);
39 assert(std::get<1>(t) == nullptr);
40 }
41 #if _LIBCPP_STD_VER > 11
42 {
43 constexpr std::tuple<int, char*> t(2, nullptr);
44 static_assert(std::get<0>(t) == 2, "");
45 static_assert(std::get<1>(t) == nullptr, "");
46 }
47 #endif
48 {
49 std::tuple<int, char*> t(2, nullptr);
50 assert(std::get<0>(t) == 2);
51 assert(std::get<1>(t) == nullptr);
52 }
53 {
54 std::tuple<int, char*, std::string> t(2, nullptr, "text");
55 assert(std::get<0>(t) == 2);
56 assert(std::get<1>(t) == nullptr);
57 assert(std::get<2>(t) == "text");
58 }
59 // extensions
60 {
61 std::tuple<int, char*, std::string> t(2);
62 assert(std::get<0>(t) == 2);
63 assert(std::get<1>(t) == nullptr);
64 assert(std::get<2>(t) == "");
65 }
66 {
67 std::tuple<int, char*, std::string> t(2, nullptr);
68 assert(std::get<0>(t) == 2);
69 assert(std::get<1>(t) == nullptr);
70 assert(std::get<2>(t) == "");
71 }
72 {
73 std::tuple<int, char*, std::string, double> t(2, nullptr, "text");
74 assert(std::get<0>(t) == 2);
75 assert(std::get<1>(t) == nullptr);
76 assert(std::get<2>(t) == "text");
77 assert(std::get<3>(t) == 0.0);
78 }
79 }
80