/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman 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(FUSION_MPL_ITERATOR_05052005_0731) #define FUSION_MPL_ITERATOR_05052005_0731 #include #include #include #include #include #include #include #include namespace boost { namespace fusion { template struct mpl_iterator : iterator_facade< mpl_iterator , typename detail::mpl_iterator_category::type > { typedef typename remove_const::type iterator_type; template struct value_of : mpl::deref {}; template struct deref { typedef typename mpl::deref< typename Iterator::iterator_type>::type type; static type call(Iterator) { return type(); } }; template struct next { typedef mpl_iterator< typename mpl::next::type> type; static type call(Iterator) { return type(); } }; template struct prior { typedef mpl_iterator< typename mpl::prior::type> type; static type call(Iterator) { return type(); } }; template struct advance { typedef mpl_iterator< typename mpl::advance::type> type; static type call(Iterator const& /*i*/) { return type(); } }; template struct distance : mpl::distance< typename I1::iterator_type , typename I2::iterator_type> { typedef typename mpl::distance< typename I1::iterator_type , typename I2::iterator_type >::type type; static type call(I1 const&, I2 const&) { return type(); } }; }; }} #endif