17ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//===----------------------------------------------------------------------===//
27ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//
37ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//                     The LLVM Compiler Infrastructure
47ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//
57ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
67ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow// Source Licenses. See LICENSE.TXT for details.
77ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//
87ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//===----------------------------------------------------------------------===//
97ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
107ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow// <utility>
117ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
127ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow// template<class T, T... I>
137ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow// struct integer_sequence
147ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow// {
157ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//     typedef T type;
167ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//
177ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//     static constexpr size_t size() noexcept;
187ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow// };
197ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
207ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow#include <utility>
217ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow#include <type_traits>
227ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow#include <cassert>
237ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
247ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clowint main()
257ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow{
267ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow#if _LIBCPP_STD_VER > 11
277ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
287ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//  Make a few of sequences
297ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    using int3    = std::integer_sequence<int, 3, 2, 1>;
307ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    using size1   = std::integer_sequence<size_t, 7>;
317ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    using ushort2 = std::integer_sequence<unsigned short, 4, 6>;
327ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    using bool0   = std::integer_sequence<bool>;
337ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
347ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow//  Make sure they're what we expect
357ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    static_assert ( std::is_same<int3::value_type, int>::value, "int3 type wrong" );
367ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    static_assert ( int3::size() == 3, "int3 size wrong" );
377ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
387ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    static_assert ( std::is_same<size1::value_type, size_t>::value, "size1 type wrong" );
397ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    static_assert ( size1::size() == 1, "size1 size wrong" );
407ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
417ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    static_assert ( std::is_same<ushort2::value_type, unsigned short>::value, "ushort2 type wrong" );
427ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    static_assert ( ushort2::size() == 2, "ushort2 size wrong" );
437ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
447ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    static_assert ( std::is_same<bool0::value_type, bool>::value, "bool0 type wrong" );
457ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow    static_assert ( bool0::size() == 0, "bool0 size wrong" );
467ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow
477ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow#endif  // _LIBCPP_STD_VER > 11
487ec46bc4228ae1c23a34220d8c6885356d18918cMarshall Clow}
49