/*============================================================================= Copyright (c) 2005 Joel de Guzman Use, modification and distribution is subject to 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) ==============================================================================*/ #if !defined(FUSION_LIST_TO_CONS_07172005_1041) #define FUSION_LIST_TO_CONS_07172005_1041 #include #include #include #include #include #include #define FUSION_VOID(z, n, _) void_ namespace boost { namespace fusion { struct nil; struct void_; }} namespace boost { namespace fusion { namespace detail { template struct list_to_cons { typedef T0 head_type; typedef list_to_cons< BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_LIST_SIZE, T), void_> tail_list_to_cons; typedef typename tail_list_to_cons::type tail_type; typedef cons type; //2006-06-01.2204 Larry Evans: // I'm guessing that what the following does is create a static // method to construct an instance of type from 0 to M args // of type T0 _0, T1 _1, ..., TM _M. This static method has // scheme: // // static type call // ( typename detail::call_param::type _0 // , typename detail::call_param::type _1 // , typename detail::call_param::type _2 // ... // , typename detail::call_param::type _M // ) // { // return type // ( _0 // , tail_list_to_cons::call // ( _1 // , _2 // ... // , _M // ) // ); // } #include }; template <> struct list_to_cons { typedef nil type; }; }}} #undef FUSION_VOID #endif