Edit: /usr/include/boost/range/has_range_iterator.hpp (2375B)
// Boost.Range library
//
// Copyright Neil Groves 2010. 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/
//
// Acknowledgments:
// Ticket #8341: Arno Schoedl - improved handling of has_range_iterator upon
// use-cases where T was const.
#ifndef BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED
#define BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED
#include
#include
#include
#include
#include
#include
namespace boost
{
namespace range_detail
{
BOOST_MPL_HAS_XXX_TRAIT_DEF(type)
template
struct has_range_iterator_impl
: boost::mpl::false_
{
};
template
struct has_range_iterator_impl<
T,
BOOST_DEDUCED_TYPENAME ::boost::enable_if<
BOOST_DEDUCED_TYPENAME mpl::eval_if,
has_type::type> >,
has_type >
>::type
>::type
>
: boost::mpl::true_
{
};
template
struct has_range_const_iterator_impl
: boost::mpl::false_
{
};
template
struct has_range_const_iterator_impl<
T,
BOOST_DEDUCED_TYPENAME ::boost::enable_if<
has_type >
>::type
>
: boost::mpl::true_
{
};
} // namespace range_detail
template
struct has_range_iterator
: range_detail::has_range_iterator_impl<
BOOST_DEDUCED_TYPENAME remove_reference::type>
{};
template
struct has_range_const_iterator
: range_detail::has_range_const_iterator_impl<
BOOST_DEDUCED_TYPENAME remove_reference::type>
{};
} // namespace boost
#endif // include guard