123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- //===----------------------------------------------------------------------===//
- //
- // 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.
- //
- //===----------------------------------------------------------------------===//
- // <tuple>
- // template<class... Types>
- // tuple<Types&&...> forward_as_tuple(Types&&... t);
- #include <tuple>
- #include <type_traits>
- #include <cassert>
- template <class Tuple>
- void
- test0(const Tuple& t)
- {
- static_assert(std::tuple_size<Tuple>::value == 0, "");
- }
- template <class Tuple>
- void
- test1a(const Tuple& t)
- {
- static_assert(std::tuple_size<Tuple>::value == 1, "");
- static_assert(std::is_same<typename std::tuple_element<0, Tuple>::type, int&&>::value, "");
- assert(std::get<0>(t) == 1);
- }
- template <class Tuple>
- void
- test1b(const Tuple& t)
- {
- static_assert(std::tuple_size<Tuple>::value == 1, "");
- static_assert(std::is_same<typename std::tuple_element<0, Tuple>::type, int&>::value, "");
- assert(std::get<0>(t) == 2);
- }
- template <class Tuple>
- void
- test2a(const Tuple& t)
- {
- static_assert(std::tuple_size<Tuple>::value == 2, "");
- static_assert(std::is_same<typename std::tuple_element<0, Tuple>::type, double&>::value, "");
- static_assert(std::is_same<typename std::tuple_element<1, Tuple>::type, char&>::value, "");
- assert(std::get<0>(t) == 2.5);
- assert(std::get<1>(t) == 'a');
- }
- #if _LIBCPP_STD_VER > 11
- template <class Tuple>
- constexpr int
- test3(const Tuple& t)
- {
- return std::tuple_size<Tuple>::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
- }
- }
|