1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <tuple> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class... Types> class tuple; 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 140e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant// template <class... Tuples> tuple<CTypes...> tuple_cat(Tuples&&... tpls); 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <tuple> 170e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant#include <utility> 180e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant#include <array> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <string> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../MoveOnly.h" 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 270e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<> t = std::tuple_cat(); 280e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 290e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 300e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<> t1; 310e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<> t2 = std::tuple_cat(t1); 320e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 330e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 340e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<> t = std::tuple_cat(std::tuple<>()); 350e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 360e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 370e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<> t = std::tuple_cat(std::array<int, 0>()); 380e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 390e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 400e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int> t1(1); 410e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int> t = std::tuple_cat(t1); 420e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<0>(t) == 1); 430e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 44da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow 45da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow#if _LIBCPP_STD_VER > 11 46da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow { 47da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<> t = std::tuple_cat(); 48da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow } 49da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow { 50da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<> t1; 51da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<> t2 = std::tuple_cat(t1); 52da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow } 53da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow { 54da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<> t = std::tuple_cat(std::tuple<>()); 55da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow } 56da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow { 57da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<> t = std::tuple_cat(std::array<int, 0>()); 58da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow } 59da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow { 60da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<int> t1(1); 61da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<int> t = std::tuple_cat(t1); 62da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow static_assert(std::get<0>(t) == 1, ""); 63da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow } 64da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow { 65da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<int> t1(1); 66da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow constexpr std::tuple<int, int> t = std::tuple_cat(t1, t1); 67da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow static_assert(std::get<0>(t) == 1, ""); 68da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow static_assert(std::get<1>(t) == 1, ""); 69da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow } 70da0a0e8a1be285d18870955cffc1b51982675dd8Marshall Clow#endif 710e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 720e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int, MoveOnly> t = 730e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple_cat(std::tuple<int, MoveOnly>(1, 2)); 740e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<0>(t) == 1); 750e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<1>(t) == 2); 760e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 770e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 780e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int, int, int> t = std::tuple_cat(std::array<int, 3>()); 790e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<0>(t) == 0); 800e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<1>(t) == 0); 810e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<2>(t) == 0); 820e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 830e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 840e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int, MoveOnly> t = std::tuple_cat(std::pair<int, MoveOnly>(2, 1)); 850e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<0>(t) == 2); 860e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<1>(t) == 1); 870e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 880e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant 890e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<> t1; 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<> t2; 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<> t3 = std::tuple_cat(t1, t2); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<> t1; 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int> t2(2); 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int> t3 = std::tuple_cat(t1, t2); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == 2); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<> t1; 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int> t2(2); 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int> t3 = std::tuple_cat(t2, t1); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == 2); 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*> t1; 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int> t2(2); 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*, int> t3 = std::tuple_cat(t1, t2); 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == nullptr); 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(t3) == 2); 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*> t1; 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int> t2(2); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int, int*> t3 = std::tuple_cat(t2, t1); 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == 2); 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(t3) == nullptr); 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*> t1; 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int, double> t2(2, 3.5); 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*, int, double> t3 = std::tuple_cat(t1, t2); 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == nullptr); 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(t3) == 2); 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<2>(t3) == 3.5); 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*> t1; 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int, double> t2(2, 3.5); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int, double, int*> t3 = std::tuple_cat(t2, t1); 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == 2); 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(t3) == 3.5); 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<2>(t3) == nullptr); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*, MoveOnly> t1(nullptr, 1); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int, double> t2(2, 3.5); 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*, MoveOnly, int, double> t3 = 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple_cat(std::move(t1), t2); 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == nullptr); 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(t3) == 1); 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<2>(t3) == 2); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<3>(t3) == 3.5); 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*, MoveOnly> t1(nullptr, 1); 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int, double> t2(2, 3.5); 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int, double, int*, MoveOnly> t3 = 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple_cat(t2, std::move(t1)); 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == 2); 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(t3) == 3.5); 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<2>(t3) == nullptr); 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<3>(t3) == 1); 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<MoveOnly, MoveOnly> t1(1, 2); 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<int*, MoveOnly> t2(nullptr, 4); 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple<MoveOnly, MoveOnly, int*, MoveOnly> t3 = 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tuple_cat(std::move(t1), std::move(t2)); 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(t3) == 1); 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(t3) == 2); 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<2>(t3) == nullptr); 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<3>(t3) == 4); 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1660e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant 1670e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 1680e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<MoveOnly, MoveOnly> t1(1, 2); 1690e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int*, MoveOnly> t2(nullptr, 4); 1700e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<MoveOnly, MoveOnly, int*, MoveOnly> t3 = 1710e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple_cat(std::tuple<>(), 1720e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::move(t1), 1730e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::move(t2)); 1740e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<0>(t3) == 1); 1750e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<1>(t3) == 2); 1760e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<2>(t3) == nullptr); 1770e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<3>(t3) == 4); 1780e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 1790e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 1800e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<MoveOnly, MoveOnly> t1(1, 2); 1810e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int*, MoveOnly> t2(nullptr, 4); 1820e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<MoveOnly, MoveOnly, int*, MoveOnly> t3 = 1830e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple_cat(std::move(t1), 1840e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<>(), 1850e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::move(t2)); 1860e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<0>(t3) == 1); 1870e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<1>(t3) == 2); 1880e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<2>(t3) == nullptr); 1890e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<3>(t3) == 4); 1900e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 1910e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 1920e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<MoveOnly, MoveOnly> t1(1, 2); 1930e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int*, MoveOnly> t2(nullptr, 4); 1940e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<MoveOnly, MoveOnly, int*, MoveOnly> t3 = 1950e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple_cat(std::move(t1), 1960e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::move(t2), 1970e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<>()); 1980e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<0>(t3) == 1); 1990e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<1>(t3) == 2); 2000e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<2>(t3) == nullptr); 2010e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<3>(t3) == 4); 2020e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 2030e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant { 2040e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<MoveOnly, MoveOnly> t1(1, 2); 2050e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int*, MoveOnly> t2(nullptr, 4); 2060e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<MoveOnly, MoveOnly, int*, MoveOnly, int> t3 = 2070e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple_cat(std::move(t1), 2080e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::move(t2), 2090e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant std::tuple<int>(5)); 2100e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<0>(t3) == 1); 2110e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<1>(t3) == 2); 2120e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<2>(t3) == nullptr); 2130e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<3>(t3) == 4); 2140e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant assert(std::get<4>(t3) == 5); 2150e1493ec5e125adfb7531b2a05c26bff26325cb2Howard Hinnant } 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 217