/*============================================================================= Copyright (c) 2003 Joel de Guzman Copyright (c) 2004 Peder Holt 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_END_HPP) #define FUSION_SEQUENCE_END_HPP #include #include #include namespace boost { namespace fusion { namespace meta { template struct end_impl { template struct apply { typedef int type; }; }; template struct end { typedef as_fusion_sequence seq_converter; typedef typename seq_converter::type seq; typedef typename end_impl:: template apply::type type; }; } #if BOOST_WORKAROUND(BOOST_MSVC,<=1300) namespace detail { template inline typename meta::end::type end(Sequence const& seq,mpl::true_) { typedef meta::end end_meta; return meta::end_impl:: template apply::call( end_meta::seq_converter::convert_const(seq)); } template inline typename meta::end::type end(Sequence& seq,mpl::false_) { typedef meta::end end_meta; return meta::end_impl:: template apply::call( end_meta::seq_converter::convert(seq)); } } template inline typename meta::end::type end(Sequence& seq) { return detail::end(seq,is_const()); } #else template inline typename meta::end::type end(Sequence const& seq) { typedef meta::end end_meta; return meta::end_impl:: template apply::call( end_meta::seq_converter::convert_const(seq)); } template inline typename meta::end::type end(Sequence& seq) { typedef meta::end end_meta; return meta::end_impl:: template apply::call( end_meta::seq_converter::convert(seq)); } #endif }} #endif