Modify

Opened 8 months ago

Closed 6 months ago

Last modified 5 months 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: barendgehrels
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 8 months ago.
Error example

Download all attachments as: .zip

Change History (3)

Changed 8 months ago by Cédric ROYER

Error example

comment:1 Changed 6 months ago by awulkiew

  • Keywords index rtree equal_to added
  • Resolution set to fixed
  • Status changed from new to closed

comment:2 Changed 5 months ago by awulkiew

  • Milestone changed from To Be Determined to Boost 1.64.0

Add Comment

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain barendgehrels.
The resolution will be deleted. Next status will be 'reopened'.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.