// Copyright (C) 2012-2013 Vicente J. Botet Escriba // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // 2013/04 Vicente J. Botet Escriba // Provide implementation up to 10 parameters when BOOST_NO_CXX11_VARIADIC_TEMPLATES is defined. // 2012/11 Vicente J. Botet Escriba // Adapt to boost libc++ implementation //===----------------------------------------------------------------------===// // // 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. // // The make_tuple_indices C++11 code is based on the one from libcxx. //===----------------------------------------------------------------------===// #ifndef BOOST_THREAD_DETAIL_MAKE_TUPLE_INDICES_HPP #define BOOST_THREAD_DETAIL_MAKE_TUPLE_INDICES_HPP #include #include namespace boost { namespace detail { #if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) // make_tuple_indices template struct tuple_indices {}; template struct make_indices_imp; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_tuple_indices { BOOST_STATIC_ASSERT_MSG(Sp <= Ep, "make_tuple_indices input error"); typedef typename make_indices_imp, Ep>::type type; }; #else // - tuple forward declaration ----------------------------------------------- template < std::size_t T0 = 0, std::size_t T1 = 0, std::size_t T2 = 0, std::size_t T3 = 0, std::size_t T4 = 0, std::size_t T5 = 0, std::size_t T6 = 0, std::size_t T7 = 0, std::size_t T8 = 0, std::size_t T9 = 0> class tuple_indices {}; template struct make_indices_imp; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; template struct make_indices_imp, Ep> { typedef typename make_indices_imp, Ep>::type type; }; // template // struct make_indices_imp, Ep> // { // typedef typename make_indices_imp, Ep>::type type; // }; template struct make_indices_imp, Ep> { typedef tuple_indices<> type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_indices_imp, Ep> { typedef tuple_indices type; }; template struct make_tuple_indices { BOOST_STATIC_ASSERT_MSG(Sp <= Ep, "make_tuple_indices input error"); typedef typename make_indices_imp, Ep>::type type; }; #endif } } #endif // header