//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // tuple forward_as_tuple(Types&&... t); #include #include template void test0(const Tuple& t) { static_assert(std::tuple_size::value == 0, ""); } template void test1a(const Tuple& t) { static_assert(std::tuple_size::value == 1, ""); static_assert(std::is_same::type, int&&>::value, ""); assert(std::get<0>(t) == 1); } template void test1b(const Tuple& t) { static_assert(std::tuple_size::value == 1, ""); static_assert(std::is_same::type, int&>::value, ""); assert(std::get<0>(t) == 2); } template void test2a(const Tuple& t) { static_assert(std::tuple_size::value == 2, ""); static_assert(std::is_same::type, double&>::value, ""); static_assert(std::is_same::type, char&>::value, ""); assert(std::get<0>(t) == 2.5); assert(std::get<1>(t) == 'a'); } #if _LIBCPP_STD_VER > 11 template constexpr int test3(const Tuple& t) { return std::tuple_size::value; } #endif int main() { { test0(std::forward_as_tuple()); } { test1a(std::forward_as_tuple(1)); } { int i = 2; test1b(std::forward_as_tuple(i)); } { double i = 2.5; char c = 'a'; test2a(std::forward_as_tuple(i, c)); #if _LIBCPP_STD_VER > 11 static_assert ( test3 (std::forward_as_tuple(i, c)) == 2, "" ); #endif } }