/*============================================================================= Copyright (c) 2006 Eric Niebler Distributed under 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(BOOST_FUSION_SEGMENTS_04052005_1141) #define BOOST_FUSION_SEGMENTS_04052005_1141 #include #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct iterator_range_tag; // segments: returns a sequence of sequences namespace extension { template struct segments_impl { template struct apply {}; }; template <> struct segments_impl { template struct apply : Sequence::template segments {}; }; template <> struct segments_impl; } namespace result_of { template struct segments { typedef typename traits::tag_of::type tag_type; typedef typename extension::segments_impl::template apply::type type; }; } template inline typename lazy_disable_if< is_const , result_of::segments >::type segments(Sequence& seq) { typedef typename traits::tag_of::type tag_type; return extension::segments_impl::template apply::call(seq); } template inline typename result_of::segments::type segments(Sequence const& seq) { typedef typename traits::tag_of::type tag_type; return extension::segments_impl::template apply::call(seq); } }} #endif