Opened 8 years ago
Last modified 8 years ago
#10920 new Bugs
Boost error from XlC11. 01 using BOOST 1.53 in union
Reported by: | Owned by: | Barend Gehrels | |
---|---|---|---|
Milestone: | To Be Determined | Component: | geometry |
Version: | Boost 1.53.0 | Severity: | Problem |
Keywords: | Union on XlC11.1 | Cc: | devika.rs@… |
Description
Hi All,
We are trying to compile sample boost code to demonstrate union on Aix64: Testcase: http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/reference/algorithms/union_.html
Following are the details of compiler Xlc Version:Version: 11.01.0000.0011 OS version:6100-06-05-1115 Boost version:1.53
It throws errors: "/usr/vacpp/include/vector.t", line 163.36: 1540-0716 (S) The template argument "std::vector<boost_1_53_0::geometry::model::ring<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector<boost_1_53_0::geometry::model::ring<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector<boost_1_53_0::geometry::model::ring<boost_1_53_0::geometry::mod..." does not match the template parameter "template class Container". "test.cpp", line 12.5: 1540-0700 (I) The previous message was produced while processing "_Ucopy". "test.cpp", line 12.5: 1540-0700 (I) The previous message was produced while processing "class std::vector<boost_1_53_0::geometry::model::ring<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector<boost_1_53_0::geometry::model::ring<boost_1_53_0::geometry::model::d2::point_xy<double,snps_boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector,std::allocator>,std::allocator<boost_1_53_0::geometry::model::ring<boost_1_53_0::geometry::model:...". "/usr/vacpp/include/vector.t", line 163.36: 1540-1174 (S) The member "template pointer _Ucopy(_It, _It, pointer)" is not declared as a template in its containing class definition. "test.cpp", line 12.5: 1540-0700 (I) The previous message was produced while processing "_Ucopy". "test.cpp", line 12.5: 1540-0700 (I) The previous message was produced while processing "class std::vector<boost_1_53_0::geometry::model::ring<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector,std::allocator>,std::allocator<boost_1_53_0::geometry::model::ring<boost_1_53_0::geometry::model::d2::point_xy<double,snps_boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector,std::allocator> > >". "/boost/boost/geometry/geometries/polygon.hpp", line 69.7: 1540-0700 (I) The previous message was produced while processing "class boost_1_53_0::geometry::model::polygon<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector,std::vector,std::allocator,std::allocator>". "test.cpp", line 12.5: 1540-0700 (I) The previous message was produced while processing "main()". "/usr/vacpp/include/vector.t", line 163.36: 1540-0716 (S) The template argument "std::vector<boost_1_53_0::geometry::model::polygon<snps_boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector<boost_1_53_0::geometry::model::polygon<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector<boost_1_53_0::geometry::model::polygon<boost_1_53_0::geom..." does not match the template parameter "template class PointList". "/usr/vacpp/include/vector.t", line 163.36: 1540-0700 (I) The previous message was produced while processing "_Ucopy". "/usr/vacpp/include/vector.t", line 163.36: 1540-0700 (I) The previous message was produced while processing "class std::vector<boost_1_53_0::geometry::model::polygon<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector<boost_1_53_0::geometry::model::polygon<snps_boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector,std::vector,std::allocator,std::allocator>,std::allocator<boost_1_53_0::geometry::model::polygon...". "/remote/ports/aix/xlcpp11_1_aix53/usr/vacpp/include/vector.t", line 163.36: 1540-1174 (S) The member "template pointer _Ucopy(_It, _It, pointer)" is not declared as a template in its containing class definition. "test.cpp", line 25.26: 1540-0700 (I) The previous message was produced while processing "_Ucopy". "test.cpp", line 25.26: 1540-0700 (I) The previous message was produced while processing "class std::vector<boost_1_53_0::geometry::model::polygon<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector,std::vector,std::allocator,std::allocator>,std::allocator<boost_1_53_0::geometry::model::polygon<boost_1_53_0::geometry::model::d2::point_xy<double,boost_1_53_0::geometry::cs::cartesian>,1,1,std::vector,std::vector,std::allocator,std::allocator> > >". "test.cpp", line 12.5: 1540-0700 (I) The previous message was produced while processing "main()".
Is this a known bug ? Please help us in case a patch is available.
Attachments (1)
Change History (5)
comment:1 by , 8 years ago
by , 8 years ago
comment:2 by , 8 years ago
Hi,
read_wkt is not causing the problem.
These four line:
typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;
polygon green, blue;
std::vector<polygon> output;
boost::geometry::union_(green, blue, output);
Please find the attachment union.txt for full error message.
comment:3 by , 8 years ago
Apparently the geometry::model::ring class itself does not compile:
"/remote/ports/aix/xlcpp11_1_aix53/usr/vacpp/include/vector.t", line 163.36: 1540-0716 (S) The template argument "std::vector<boost_1_53_0::geometry::model::ring <boost_1_53_0::geometry::model::d2::point_xy <double,boost_1_53_0::geometry::cs::cartesian>,1,1, std::vector<boost_1_53_0::geometry::model::ring <boost_1_53_0::geometry::model::d2::point_xy <double,boost_1_53_0::geometry::cs::cartesian>,1,1, std::vector<boost_1_53_0::geometry::model::ring <boost_1_53_0::geometry::mod..." does not match the template parameter "template class Container".
What kind of STL is used by AIX? Is it compliant? Can you maybe use stlport?
comment:4 by , 8 years ago
I'm guessing that at this point we shouldn't change the definition of a model::ring<>
and model::polygon<>
. So we are unable to fix it on our side.
But those types (model::ring
, model::polygon
) are just the default ones implemented for the users convenience. Boost.Geometry allows to use any user-defined type as long as it's adapted to one of the Geometry concepts. See:
and in particular:
- http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/reference/concepts/concept_ring.html
- http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/reference/concepts/concept_polygon.html
You could implement your own ring and polygon types, adapt them to Boost.Geometry concepts and use with the algorithms. Consider one of the methods below:
USE MACRO FOR ADAPTATION
You could use one of the REGISTER_XXX
macros which generates the adaptation code automatically, see:
- http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/reference/adapted/register.html
and in particular:
- http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring.html
- http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring_templated.html
It could look as simple as this:
typedef boost::geometry::model::d2::point_xy<double> point_2d; struct ring_2d : public std::vector<point_2d> {} BOOST_GEOMETRY_REGISTER_RING(ring_2d)
ADAPT YOUR OWN TYPE MANUALLY
The most simple way of doing it would be to copy the contents of Boost.Geometry files defining the models, e.g. see:
- https://github.com/boostorg/geometry/blob/master/include/boost/geometry/geometries/ring.hpp
- https://github.com/boostorg/geometry/blob/master/include/boost/geometry/geometries/polygon.hpp
Then remove unneeded template parameters (e.g. Container
for ring
and PointList
,RingList
for polygon
) and internally use e.g. std::vector<>
everywhere instead. Then adapt this type properly, so remove the template parameters also from traits' specializations below, etc.
Hi,
I personally am not aware of this problem. I have no access to an AIX machine.
Is the code in test.cpp exactly the same as on the page? Or have you tried the example contained in
BOOST_ROOT/libs/geometry/doc/src/examples/algorithms/union.cpp
(https://github.com/boostorg/geometry/blob/boost-1.53.0/doc/src/examples/algorithms/union.cpp) ?Could you try to find what exactly fails to compile. Is it
model::polygon
,read_wkt
orunion_
? Are you able to compile thebg::model::polygon
properly? For example:If it was ok and you tried to add other things from the example, when does the code stop to compile?
Could you provide more info or contact the developers on the mailing list (http://lists.boost.org/mailman/listinfo.cgi/geometry)?