// Boost.Range library // // Copyright Eric Niebler 2014. 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) // // For more information, see http://www.boost.org/libs/range/ // #ifndef BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP #define BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP #if defined(_MSC_VER) # pragma once #endif #ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP # error This file should only be included from #endif #if BOOST_WORKAROUND(BOOST_MSVC, <= 1600) namespace boost { namespace cb_details { template struct iterator; } namespace python { template struct iterator; } namespace type_erasure { template< class Traversal, class T /*= _self*/, class Reference /*= ::boost::use_default*/, class DifferenceType /*= ::std::ptrdiff_t*/, class ValueType /*= typename deduced >::type*/ > struct iterator; } namespace unordered { namespace iterator_detail { template struct iterator; }} namespace container { namespace container_detail { template class iterator; }} namespace spirit { namespace lex { namespace lexertl { template class iterator; }}} namespace range_detail { template struct has_iterator< ::boost::cb_details::iterator > : mpl::false_ {}; template struct has_iterator< ::boost::cb_details::iterator const> : mpl::false_ {}; template struct has_iterator< ::boost::python::iterator > : mpl::false_ {}; template struct has_iterator< ::boost::python::iterator const> : mpl::false_ {}; template struct has_iterator< ::boost::type_erasure::iterator > : mpl::false_ {}; template struct has_iterator< ::boost::type_erasure::iterator const> : mpl::false_ {}; template struct has_iterator< ::boost::unordered::iterator_detail::iterator > : mpl::false_ {}; template struct has_iterator< ::boost::unordered::iterator_detail::iterator const> : mpl::false_ {}; template struct has_iterator< ::boost::container::container_detail::iterator > : mpl::false_ {}; template struct has_iterator< ::boost::container::container_detail::iterator const> : mpl::false_ {}; template struct has_iterator< ::boost::spirit::lex::lexertl::iterator > : mpl::false_ {}; template struct has_iterator< ::boost::spirit::lex::lexertl::iterator const> : mpl::false_ {}; } } #endif #endif