1 /*=============================================================================
2 Copyright (c) 2011 Eric Niebler
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #if !defined(BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED)
8 #define BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED
10 #include <boost/fusion/support/config.hpp>
11 #include <boost/mpl/assert.hpp>
12 #include <boost/mpl/bool.hpp>
14 namespace boost { namespace fusion
16 struct iterator_range_tag;
18 template <typename Context>
19 struct segmented_iterator;
23 template <typename Tag>
24 struct is_segmented_impl;
26 // An iterator_range of segmented_iterators is segmented
28 struct is_segmented_impl<iterator_range_tag>
31 template <typename Iterator>
32 struct is_segmented_iterator
36 template <typename Iterator>
37 struct is_segmented_iterator<Iterator &>
38 : is_segmented_iterator<Iterator>
41 template <typename Iterator>
42 struct is_segmented_iterator<Iterator const>
43 : is_segmented_iterator<Iterator>
46 template <typename Context>
47 struct is_segmented_iterator<segmented_iterator<Context> >
52 template <typename Sequence>
54 : is_segmented_iterator<typename Sequence::begin_type>
56 BOOST_MPL_ASSERT_RELATION(
57 is_segmented_iterator<typename Sequence::begin_type>::value
59 , is_segmented_iterator<typename Sequence::end_type>::value);