//===----------------------------------------------------------------------===//
//
//                     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 <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
    }
}
