Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#12566 closed Bugs (fixed)

rtree: equal_to ambiguous template instantiation when contain a raw pointer in pair, calling method remove

Reported by: cedric@… Owned by: Barend Gehrels
Milestone: Boost 1.64.0 Component: geometry
Version: Boost 1.61.0 Severity: Regression
Keywords: index rtree equal_to Cc:

Description

Im trying to compile this example:

main.cpp:

#include <boost/geometry.hpp>

namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
namespace bgm = boost::geometry::model;

int main() {
    using Point = bgm::point<double, 2, bg::cs::spherical_equatorial<bg::degree>>;
    using ValueType = std::pair<Point, int*>;
    using Rtree = bgi::rtree<ValueType, bgi::quadratic<16>>;

    int a,b;
    Rtree rtree;
    rtree.insert(std::make_pair(Point(45,45), &a));
    rtree.insert(std::make_pair(Point(45,45), &b));
    rtree.remove(std::make_pair(Point(45,45), &b));

    return 0;
}

using gcc 6.2.1 and boost 1.61.0 or 1.58.0 (no problem with boost 1.52.0)

I got folowing error:

/usr/include/boost/geometry/index/equal_to.hpp:127:41: erreur : ambiguous template instantiation for ‘struct boost::geometry::index::detail::equals<int*, void>’
             && detail::equals<T2>::apply(l.second, r.second);
                ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/usr/include/boost/geometry/index/equal_to.hpp:28:8: note : candidats sont : template<class Geometry, class Tag> struct boost::geometry::index::detail::equals<Geometry*, Tag> [with Geometry = int; Tag = void]
 struct equals<Geometry *, Tag>
        ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/boost/geometry/index/equal_to.hpp:37:8: note :                  template<class T> struct boost::geometry::index::detail::equals<T, void> [with T = int*]
 struct equals<T, void>
        ^~~~~~~~~~~~~~~
/usr/include/boost/geometry/index/equal_to.hpp:127:41: erreur : incomplete type ‘boost::geometry::index::detail::equals<int*, void>’ used in nested name specifier
             && detail::equals<T2>::apply(l.second, r.second);
                ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~

no problem if I replace int* by int

also document here http://stackoverflow.com/questions/39970131/issue-storing-raw-pointers-in-boost-r-tree

Attachments (1)

main.cpp (544 bytes ) - added by Cédric ROYER 6 years ago.
Error example

Download all attachments as: .zip

Change History (3)

by Cédric ROYER, 6 years ago

Attachment: main.cpp added

Error example

comment:1 by awulkiew, 6 years ago

Keywords: index rtree equal_to added
Resolution: fixed
Status: newclosed

comment:2 by awulkiew, 6 years ago

Milestone: To Be DeterminedBoost 1.64.0
Note: See TracTickets for help on using tickets.