//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // template // tuple forward_as_tuple(Types&&... t); // UNSUPPORTED: c++03 #include #include #include #include "test_macros.h" template void test0(const Tuple&) { 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 TEST_STD_VER > 11 template constexpr int test3(const Tuple&) { return std::tuple_size::value; } #endif int main(int, char**) { { 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 TEST_STD_VER > 11 static_assert ( test3 (std::forward_as_tuple(i, c)) == 2, "" ); #endif } return 0; }