Boost logo

Geometry :

Subject: Re: [geometry] Compilation error with version 1.56
From: Adam Wulkiewicz (adam.wulkiewicz_at_[hidden])
Date: 2014-10-22 17:28:12


Hi,

Jakka30 wrote:
> Hello all, We are trying to move to Latest Boost version 1.56 from
> version 1.55. In version 1.55, everything compiles fine. When we moved
> to version 1.56, we are getting the following compile error with
> Visual Studio 2013 compiler. Could someone help us to fix this one?

I'll start from possible fixes/workarounds. You could:
1. wait for Boost 1.57 in which 1-argument intersects() doesn't use the
code failing for non 2d Geometries.
2. define BOOST_GEOMETRY_NO_ROBUSTNESS but then the robustness upgrades
would be disabled in the whole library
3. modify your local version of intersects() like this:
https://github.com/boostorg/geometry/commit/e1dfe2e5946f8be4844b089836bd48be08450f35.
It should work if you just replaced your local
boost/geometry/algorithms/intersects.hpp with this file:
https://github.com/boostorg/geometry/blob/e1dfe2e5946f8be4844b089836bd48be08450f35/include/boost/geometry/algorithms/intersects.hpp
4. Since your Polygons are 3D but the support for 3D Geometries in
Boost.Geometry is limited, i.e. in the case of intersects() probably
(I'm guessing) only first 2 coordinates are used anyway, you could
switch to 2D Polygons.

assign_values() probably shouldn't be used in init_rescale_policy(), and
btw we probably shouldn't use it internally at all since it compiles
only for a specific dimension. AFAIU rescale policy should be
dimension-agnostic and this is a bug, do you agree?
If the answer is yes...
Should we fix it in 1.57?
Should it use all coordinates for rescaling so be dimension-agnostic or
should it be only higher-dimensions-compatible, i.e. rescale using only
first 2 coordinates and ignore other?

Regards,
Adam

> t:\boost\boost\geometry\algorithms\assign.hpp(155): error C2780: 'void
> boost::geometry::dispatch::assign<boost::geometry::point_tag,Geometry,3>::apply(Point
> &,const T &,const T &,const T &)' : expects 4 arguments - 3 provided
> 1> with 1> [ 1> Geometry=robust_point_type 1> ,
> Point=robust_point_type 1> ] 1>
> t:\boost\boost\geometry\algorithms\detail\assign_values.hpp(277) : see
> declaration of
> 'boost::geometry::dispatch::assign<boost::geometry::point_tag,Geometry,3>::apply'
> 1> with 1> [ 1> Geometry=robust_point_type 1> ] 1>
> t:\boost\boost\geometry\policies\robustness\get_rescale_policy.hpp(70)
> : see reference to function template instantiation 'void
> boost::geometry::assign_values<RobustPoint,boost::long_long_type>(Geometry
> &,const Type &,const Type &)' being compiled 1> with 1> [ 1>
> RobustPoint=robust_point_type 1> , Geometry=robust_point_type 1> ,
> Type=boost::long_long_type 1> ] 1>
> t:\boost\boost\geometry\policies\robustness\get_rescale_policy.hpp(154) :
> see reference to function template instantiation 'void
> boost::geometry::detail::get_rescale_policy::init_rescale_policy<point_type,robust_point_type,Geometry,factor_type>(const
> Geometry &,Point &,RobustPoint &,Factor &)' being compiled 1> with 1>
> [ 1> Geometry=QCS::Polygon3D1> , Point=point_type 1> ,
> RobustPoint=robust_point_type 1> , Factor=factor_type 1> ] 1>
> t:\boost\boost\geometry\policies\robustness\get_rescale_policy.hpp(277) :
> see reference to function template instantiation 'Policy
> boost::geometry::detail::get_rescale_policy::get_rescale_policy::apply(const
> Geometry &)' being compiled 1> with 1> [ 1> Policy=rescale_policy_type
> 1> , Geometry=QCS::Polygon3D1> ] 1>
> t:\boost\boost\geometry\policies\robustness\get_rescale_policy.hpp(277) :
> see reference to function template instantiation 'Policy
> boost::geometry::detail::get_rescale_policy::get_rescale_policy::apply(const
> Geometry &)' being compiled 1> with 1> [ 1> Policy=rescale_policy_type
> 1> , Geometry=QCS::Polygon3D1> ] 1>
> t:\boost\boost\geometry\algorithms\intersects.hpp(67) : see reference
> to function template instantiation 'Policy
> boost::geometry::get_rescale_policy<rescale_policy_type,Geometry>(const Geometry
> &)' being compiled 1> with 1> [ 1> Policy=rescale_policy_type 1> ,
> Geometry=QCS::Polygon3D1> ] 1>
> q:\lpcore\lassymbols\lppolygon.cpp(1066) : see reference to function
> template instantiation 'bool
> boost::geometry::intersects<QCS::Polygon3D<Type>>(const Geometry &)'
> being compiled 1> with 1> [ 1> Type=double 1> ,
> Geometry=QCS::Polygon3D1> ] Thanks, Sures



Geometry list run by mateusz at loskot.net