/usr/include/boost/geometry/index/detail
Edit: /usr/include/boost/geometry/index/detail/meta.hpp (3289B)
// Boost.Geometry Index
//
// Copyright (c) 2011-2019 Adam Wulkiewicz, Lodz, Poland.
//
// 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)
#include
#include
#include
#include
#include
#include
#ifndef BOOST_GEOMETRY_INDEX_DETAIL_META_HPP
#define BOOST_GEOMETRY_INDEX_DETAIL_META_HPP
namespace boost { namespace geometry { namespace index { namespace detail {
template
struct is_range
: ::boost::mpl::aux::has_type< ::boost::range_iterator >
{};
//template
//struct is_range_of_convertible_values_impl
// : ::boost::is_convertible::type, V>
//{};
//
//template
//struct is_range_of_convertible_values_impl
// : ::boost::mpl::bool_
//{};
//
//template
//struct is_range_of_convertible_values
// : is_range_of_convertible_values_impl::value>
//{};
// Implemented this way in order to prevent instantiation of all type traits at
// once because some of them are causing problems with gcc 4.6 namely
// is_convertible, std::pair, T> >
// because segment<> is derived from pair<> and pair<> has copy ctor taking
// other pair<> of any types the compiler tries to instantiate ctor of
// pair taking pair which results in instantiation of
// segment's ctor taking a point which results in compilation error.
// This is probably compiler's bug.
template
struct convertible_type_impl
{
typedef ResultType type;
};
template
struct convertible_type_impl
{
typedef typename boost::mpl::if_c
<
boost::is_convertible::value,
Indexable,
void
>::type result_type;
typedef typename convertible_type_impl
<
T, Value, Indexable, result_type, 1
>::type type;
};
template
struct convertible_type_impl
{
typedef typename boost::mpl::if_c
<
boost::is_convertible::value,
Value,
void
>::type type;
};
template
struct convertible_type
{
typedef typename boost::mpl::if_c
<
boost::is_same::value,
Value,
typename boost::mpl::if_c
<
boost::is_same::value,
Indexable,
void
>::type
>::type result_type;
typedef typename convertible_type_impl
<
T, Value, Indexable, result_type, 0
>::type type;
};
}}}} // namespace boost::geometry::index::detail
#endif // BOOST_GEOMETRY_INDEX_DETAIL_META_HPP