/*! @file Defines `boost::hana::detail::type_foldr1`. @copyright Louis Dionne 2013-2016 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_HANA_DETAIL_TYPE_FOLDR1_HPP #define BOOST_HANA_DETAIL_TYPE_FOLDR1_HPP #include BOOST_HANA_NAMESPACE_BEGIN namespace detail { template struct type_foldr1_t; template <> struct type_foldr1_t<0> { template < template class f, typename state > using result = state; }; template <> struct type_foldr1_t<1> { template < template class f, typename x1, typename state > using result = typename f::type; }; template <> struct type_foldr1_t<2> { template < template class f, typename x1, typename x2, typename state > using result = typename f::type>::type; }; template <> struct type_foldr1_t<3> { template < template class f, typename x1, typename x2, typename x3, typename state > using result = typename f< x1, typename f< x2, typename f< x3, state >::type >::type >::type; }; template <> struct type_foldr1_t<4> { template < template class f, typename x1, typename x2, typename x3, typename x4, typename state > using result = typename f< x1, typename f< x2, typename f< x3, typename f< x4, state >::type >::type >::type >::type; }; template <> struct type_foldr1_t<5> { template < template class f, typename x1, typename x2, typename x3, typename x4, typename x5, typename state > using result = typename f< x1, typename f< x2, typename f< x3, typename f< x4, typename f< x5, state >::type >::type >::type >::type >::type; }; template <> struct type_foldr1_t<6> { template < template class f, typename x1, typename x2, typename x3, typename x4, typename x5, typename x6, typename ...xs > using result = typename f< x1, typename f< x2, typename f< x3, typename f< x4, typename f< x5, typename type_foldr1_t<(sizeof...(xs) > 6 ? 6 : sizeof...(xs))>:: template result >::type >::type >::type >::type >::type; }; template