/*============================================================================= Copyright (c) 2003 Joel de Guzman Copyright (c) 2004 Peder Holt Copyright (c) 2005 Eric Niebler 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_SEQUENCE_DETAIL_CONS_BEGIN_END_TRAITS_HPP) #define FUSION_SEQUENCE_DETAIL_CONS_BEGIN_END_TRAITS_HPP #include #include #include namespace boost { namespace fusion { struct nil; struct cons_tag; template struct cons; template struct cons_iterator; namespace cons_detail { template struct begin_traits_impl { typedef cons_iterator type; static type call(Cons& t) { return type(t); } }; template struct end_traits_impl { typedef cons_iterator< typename mpl::if_, nil const, nil>::type> type; static type call(Cons&) { FUSION_RETURN_DEFAULT_CONSTRUCTED; } }; } namespace meta { template struct begin_impl; template <> struct begin_impl { template struct apply : cons_detail::begin_traits_impl {}; }; template struct end_impl; template <> struct end_impl { template struct apply : cons_detail::end_traits_impl {}; }; } }} namespace boost { namespace mpl { template struct begin_impl; template struct end_impl; template <> struct begin_impl : fusion::meta::begin_impl {}; template <> struct end_impl : fusion::meta::end_impl {}; }} #endif