/*! @file Defines `boost::hana::detail::type_foldl1`. @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_FOLDL1_HPP #define BOOST_HANA_DETAIL_TYPE_FOLDL1_HPP #include BOOST_HANA_NAMESPACE_BEGIN namespace detail { template struct type_foldl1_t; template <> struct type_foldl1_t<0> { template < template class f, typename state > using result = state; }; template <> struct type_foldl1_t<1> { template < template class f, typename state, typename x1 > using result = typename f::type; }; template <> struct type_foldl1_t<2> { template < template class f, typename state, typename x1, typename x2 > using result = typename f::type, x2>::type; }; template <> struct type_foldl1_t<3> { template < template class f, typename state, typename x1, typename x2, typename x3 > using result = typename f< typename f< typename f::type, x2 >::type, x3 >::type; }; template <> struct type_foldl1_t<4> { template < template class f, typename state, typename x1, typename x2, typename x3, typename x4 > using result = typename f< typename f< typename f< typename f::type, x2 >::type, x3 >::type, x4 >::type; }; template <> struct type_foldl1_t<5> { template < template class f, typename state, typename x1, typename x2, typename x3, typename x4, typename x5 > using result = typename f< typename f< typename f< typename f< typename f::type, x2 >::type, x3 >::type, x4 >::type, x5 >::type; }; template <> struct type_foldl1_t<6> { template < template class f, typename state, typename x1, typename x2, typename x3, typename x4, typename x5, typename x6, typename ...xs > using result = typename type_foldl1_t<(sizeof...(xs) > 6 ? 6 : sizeof...(xs))>:: template result< f, typename f< typename f< typename f< typename f< typename f< typename f::type, x2 >::type, x3 >::type, x4 >::type, x5 >::type, x6 >::type, xs... >; }; template