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/mpl/assert.hpp>
11 #include <boost/mpl/bool.hpp>
13 namespace boost { namespace fusion
15 struct iterator_range_tag;
17 template <typename Context>
18 struct segmented_iterator;
22 template <typename Tag>
23 struct is_segmented_impl;
25 // An iterator_range of segmented_iterators is segmented
27 struct is_segmented_impl<iterator_range_tag>
30 template <typename Iterator>
31 struct is_segmented_iterator
35 template <typename Iterator>
36 struct is_segmented_iterator<Iterator &>
37 : is_segmented_iterator<Iterator>
40 template <typename Iterator>
41 struct is_segmented_iterator<Iterator const>
42 : is_segmented_iterator<Iterator>
45 template <typename Context>
46 struct is_segmented_iterator<segmented_iterator<Context> >
51 template <typename Sequence>
53 : is_segmented_iterator<typename Sequence::begin_type>
55 BOOST_MPL_ASSERT_RELATION(
56 is_segmented_iterator<typename Sequence::begin_type>::value
58 , is_segmented_iterator<typename Sequence::end_type>::value);