Ошибка компиляции стратегии геометрии расстояния Boost 1.65.1 с Visual Studio 2017
При попытке скомпилировать мой проект с новой версией boost 1.65.1, я получаю следующую ошибку:
C:\Users\twozn\Dev\soundtoolkit\stk\libraries\boost/geometry/strategies/distance.hpp(101): error C2664: 'int boost::mpl::assertion_failed<false>(boost::mpl::assert<false>::type)': cannot convert argument 1 from 'boost::mpl::failed ************(__cdecl boost::geometry::strategy::distance::services::default_strategy<boost::geometry::point_tag,boost::geometry::segment_tag,boost::geometry::model::point<float,2,boost::geometry::cs::cartesian>,boost::geometry::model::point<float,2,boost::geometry::cs::cartesian>,boost::geometry::cartesian_tag,boost::geometry::cartesian_tag,void>::NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE_COMBINATION::* ***********)(boost::mpl::assert_::types<Point1,Point2,CsTag1,CsTag2>)' to 'boost::mpl::assert<false>::type'
1> with
1> [
1> Point1=boost::geometry::model::point<float,2,boost::geometry::cs::cartesian>,
1> Point2=boost::geometry::model::point<float,2,boost::geometry::cs::cartesian>,
1> CsTag1=boost::geometry::cartesian_tag,
1> CsTag2=boost::geometry::cartesian_tag
1> ]
который запускается линией
std::vector<Value> results;
rtree.query(boost::geometry::index::nearest(Point(p.x, p.y), 1), std::back_inserter(results));
где rtree
выше определяется как
using Point = boost::geometry::model::point<float, 2,boost::geometry::cs::cartesian>;
using Segment = boost::geometry::model::segment<Point>;
using Value = std::pair<Segment, size_t>;
boost::geometry::index::rtree<Value, boost::geometry::index::rstar<16>> rtree;
Утверждение срабатывает так: (boost/geometry/ стратегии /distance.hpp):
template
<
typename GeometryTag1,
typename GeometryTag2,
typename Point1,
typename Point2 = Point1,
typename CsTag1 = typename cs_tag<Point1>::type,
typename CsTag2 = typename cs_tag<Point2>::type,
typename UnderlyingStrategy = void
>
struct default_strategy
{
BOOST_MPL_ASSERT_MSG
(
false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE_COMBINATION
, (types<Point1, Point2, CsTag1, CsTag2>)
);
};
Это скомпилировано и работает правильно с Boost 1.64.0. Компилятор Visual Studio 2017, обновление 1. В чем здесь проблема?
1 ответ
Решение
Не имея доступа к MSVC, я мог бы / догадаться / что вам нужно включить больше заголовков. Возможно, они косвенно включены в Boost 1.64.0.
Посмотрите, можете ли вы скомпилировать следующий автономный пример:
#include <boost/geometry/geometry.hpp>
#include <boost/geometry/core/coordinate_system.hpp>
#include <boost/geometry/geometries/segment.hpp>
#include <boost/geometry/index/predicates.hpp>
using Point = boost::geometry::model::point<float, 2,boost::geometry::cs::cartesian>;
using Segment = boost::geometry::model::segment<Point>;
using Value = std::pair<Segment, size_t>;
int main() {
boost::geometry::index::rtree<Value, boost::geometry::index::rstar<16>> rtree;
std::vector<Value> results;
rtree.query(boost::geometry::index::nearest(Point(1, 2), 1), std::back_inserter(results));
}