Modify

Ticket #12566 (closed Bugs: fixed)

Opened 6 months ago

Last modified 4 months ago

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

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

Change History

Changed 6 months ago by Cédric ROYER

Error example

comment:1 Changed 4 months ago by awulkiew

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

comment:2 Changed 4 months ago by awulkiew

  • Milestone changed from To Be Determined to Boost 1.64.0
View

Add a comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
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.