Boost logo

Geometry :

Subject: Re: [geometry] One more compilation error with Boost Geometry 1.56
From: Adam Wulkiewicz (adam.wulkiewicz_at_[hidden])
Date: 2014-10-24 13:45:14


Hi,

2014-10-24 17:55 GMT+02:00 jakka30 <sjakka_at_[hidden]>:

> Hello Adam,
>
> Thank you for your reply. We registered our legacy geometries with
> boost::geometry. Here is my point registration details.
>
>
Did you also use MSVS2012 with Boost 1.55?

The default versions of traits indeed has additional template parameter
Enable defaulting to void but it should work as expected. I'm not sure if
this additional parameter is really required and it may be misleading but
the code shouldn't fail to compile. This was added 3 years ago:
https://github.com/boostorg/geometry/commit/e051050b44a15e713a46e3268f7390919e1a4685.
So it was released with the first released version of Boost.Geometry in
Boost 1.47.

The adaptation of a QCS::Point2D<> looks ok. Besides those &lt; characters.
Why some of the less operators/angle brackets was pasted below correctly
but some of them are represented as &lt; ?
Does it look the same in your code?
Honestly, the errors you pasted looked like if there was some brackets
missing "}" or there was some additional semicolons ";" in wrong places.

Btw, when I mentioned a failing example I had a code of a full, failing
program in mind. Some *.cpp file that fails to compile. Would something
like this be possible?
Does the attached test file work for you?

Regards,
Adam

>
> //Point 2D registration wtih Boost
> namespace boost
> {
> namespace geometry
> {
> namespace traits
> {
> template<typename P> struct
> tag<QCS::Point2D&lt;P>> { typedef point_tag
> type; };
> template<typename P> struct
> dimension<QCS::Point2D&lt;P>> :
> boost::mpl::int_<2> {};
> template<typename P> struct
> coordinate_type<QCS::Point2D&lt;P>> { typedef
> P type; };
> template<typename P> struct
> coordinate_system<QCS::Point2D&lt;P>> {
> typedef cs::cartesian type; };
>
> template<typename P> struct
> access<QCS::Point2D&lt;P>, 0>
> {
> static inline P get(QCS::Point2D<P> const&
> p)
> { return p.m_x; }
> static inline void set(QCS::Point2D<P>& p,
> P const& value)
> { p.SetX(value); }
> };
>
> template<typename P> struct
> access<QCS::Point2D&lt;P>, 1>
> {
> static inline P get(QCS::Point2D<P> const&
> p)
> { return p.m_y; }
> static inline void set(QCS::Point2D<P>& p,
> P const& value)
> { p.SetY(value); }
> };
> }
> }
> }
>
> I am getting the following errors in 1.56 but it was working fine in 1.55
>
> >q:\libraries\geometrylib\point.h(170): error C2976:
> 'boost::geometry::traits::tag' : too few template arguments
> 1> t:\boost\boost\geometry\core\tag.hpp(42) : see declaration of
> 'boost::geometry::traits::tag'
>
>





Geometry list run by mateusz at loskot.net