$include_dir="/home/hyper-archives/geometry/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [geometry] Querying index using intersection with custom geometry
From: Adam Wulkiewicz (adam.wulkiewicz_at_[hidden])
Date: 2014-03-31 06:56:15
Hi Michael,
Michael Nett wrote:
> Hi Adam,
>
> I've tried compiling your example code on Boost (version 1.48) and get 
> the following compiler errors (sorry for the wall of text). Regarding 
> your initial question, the objects we index in the R-Tree are pointers 
> (of an abstract base class).
>
AFAIR the R-tree was officially released in Boost 1.54 so my question is 
exactly what version of Boost.Geometry are you using?
> Regards,
> Michael
>
> In file included from 
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:33:0,
>                  from 
> /usr/local/include/boost/geometry/algorithms/append.hpp:24,
>                  from 
> /usr/local/include/boost/geometry/algorithms/detail/assign_values.hpp:29,
>                  from 
> /usr/local/include/boost/geometry/strategies/cartesian/cart_intersect.hpp:21,
>                  from 
> /usr/local/include/boost/geometry/strategies/intersection.hpp:22,
>                  from 
> /usr/local/include/boost/geometry/strategies/strategies.hpp:25,
>                  from /usr/local/include/boost/geometry/geometry.hpp:35,
>                  from 
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
>                  from foo.cc:1:
> /usr/local/include/boost/geometry/algorithms/not_implemented.hpp: In 
> instantiation of 'boost::geometry::nyi::not_implemented_error<void, 
> void, void>':
> /usr/local/include/boost/geometry/algorithms/not_implemented.hpp:103:8:   
> instantiated from 'boost::geometry::not_implemented<void, void, void>'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:66:8: 
>   instantiated from 'boost::geometry::dispatch::check<const MyFrustum, 
> void, true>'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:157:8: 
>   instantiated from 'boost::geometry::concept::detail::checker<const 
> MyFrustum>'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:180:31:   
> instantiated from 'void boost::geometry::concept::check() [with 
> Geometry = const MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:97:5:   
> instantiated from 'bool boost::geometry::intersects(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const 
> G1&, const G2&) [with G1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const 
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag = 
> boost::geometry::index::detail::intersects_tag, 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag, 
> First, Last>::apply(const Predicate&, const Value&, const Indexable&) 
> [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Predicate = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24: 
>   instantiated from 'bool 
> boost::geometry::index::detail::predicates_check(const Predicates&, 
> const Value&, const Indexable&) [with Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u, Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Value = int, 
> Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13: 
>   instantiated from 'void 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::operator()(const internal_node&) [with Value = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Options = 
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>, 
> boost::geometry::index::detail::rtree::insert_reinsert_tag, 
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag, 
> boost::geometry::index::detail::rtree::split_default_tag, 
> boost::geometry::index::detail::rtree::rstar_tag, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Translator = 
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, Box = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Allocators = 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, OutIter = 
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::internal_node = 
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, 
> boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1:   instantiated from here
> /usr/local/include/boost/geometry/algorithms/not_implemented.hpp:64:5: 
> error: no matching function for call to 
> 'assertion_failed(mpl_::failed************ 
> (boost::geometry::nyi::not_implemented_error<void, void, 
> void>::THIS_OPERATION_IS_NOT_OR_NOT_YET_IMPLEMENTED::************)(mpl_::assert_::types<void, 
> void, void, mpl_::na>))'
> /usr/local/include/boost/geometry/algorithms/not_implemented.hpp:64:5: 
> note: candidate is:
> /usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C> 
> int mpl_::assertion_failed(typename mpl_::assert<C>::type)
> In file included from 
> /usr/local/include/boost/geometry/core/reverse_dispatch.hpp:25:0,
>                  from 
> /usr/local/include/boost/geometry/algorithms/distance.hpp:25,
>                  from 
> /usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
>                  from 
> /usr/local/include/boost/geometry/strategies/strategies.hpp:33,
>                  from /usr/local/include/boost/geometry/geometry.hpp:35,
>                  from 
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
>                  from foo.cc:1:
> /usr/local/include/boost/geometry/core/geometry_id.hpp: In 
> instantiation of 'boost::geometry::core_dispatch::geometry_id<void>':
> /usr/local/include/boost/geometry/core/geometry_id.hpp:87:8:   
> instantiated from 'boost::geometry::geometry_id<MyFrustum>'
> /usr/local/include/boost/geometry/core/reverse_dispatch.hpp:57:8:   
> instantiated from 
> 'boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, MyFrustum>'
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80:   
> instantiated from 'bool boost::geometry::disjoint(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:   
> instantiated from 'bool boost::geometry::intersects(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const 
> G1&, const G2&) [with G1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const 
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag = 
> boost::geometry::index::detail::intersects_tag, 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag, 
> First, Last>::apply(const Predicate&, const Value&, const Indexable&) 
> [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Predicate = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24: 
>   instantiated from 'bool 
> boost::geometry::index::detail::predicates_check(const Predicates&, 
> const Value&, const Indexable&) [with Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u, Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Value = int, 
> Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13: 
>   instantiated from 'void 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::operator()(const internal_node&) [with Value = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Options = 
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>, 
> boost::geometry::index::detail::rtree::insert_reinsert_tag, 
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag, 
> boost::geometry::index::detail::rtree::split_default_tag, 
> boost::geometry::index::detail::rtree::rstar_tag, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Translator = 
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, Box = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Allocators = 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, OutIter = 
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::internal_node = 
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, 
> boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1:   instantiated from here
> /usr/local/include/boost/geometry/core/geometry_id.hpp:39:5: error: no 
> matching function for call to 
> 'assertion_failed(mpl_::failed************ 
> (boost::geometry::core_dispatch::geometry_id<void>::NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE::************)(mpl_::assert_::types<void, 
> mpl_::na, mpl_::na, mpl_::na>))'
> /usr/local/include/boost/geometry/core/geometry_id.hpp:39:5: note: 
> candidate is:
> /usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C> 
> int mpl_::assertion_failed(typename mpl_::assert<C>::type)
> In file included from 
> /usr/local/include/boost/geometry/algorithms/distance.hpp:25:0,
>                  from 
> /usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
>                  from 
> /usr/local/include/boost/geometry/strategies/strategies.hpp:33,
>                  from /usr/local/include/boost/geometry/geometry.hpp:35,
>                  from 
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
>                  from foo.cc:1:
> /usr/local/include/boost/geometry/core/reverse_dispatch.hpp: In 
> instantiation of 
> 'boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, MyFrustum>':
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80:   
> instantiated from 'bool boost::geometry::disjoint(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:   
> instantiated from 'bool boost::geometry::intersects(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const 
> G1&, const G2&) [with G1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const 
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag = 
> boost::geometry::index::detail::intersects_tag, 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag, 
> First, Last>::apply(const Predicate&, const Value&, const Indexable&) 
> [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Predicate = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24: 
>   instantiated from 'bool 
> boost::geometry::index::detail::predicates_check(const Predicates&, 
> const Value&, const Indexable&) [with Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u, Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Value = int, 
> Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13: 
>   instantiated from 'void 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::operator()(const internal_node&) [with Value = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Options = 
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>, 
> boost::geometry::index::detail::rtree::insert_reinsert_tag, 
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag, 
> boost::geometry::index::detail::rtree::split_default_tag, 
> boost::geometry::index::detail::rtree::rstar_tag, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Translator = 
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, Box = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Allocators = 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, OutIter = 
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::internal_node = 
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, 
> boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1:   instantiated from here
> /usr/local/include/boost/geometry/core/reverse_dispatch.hpp:57:8: 
> error: no type named 'type' in 'struct 
> boost::geometry::geometry_id<MyFrustum>'
> In file included from 
> /usr/local/include/boost/geometry/algorithms/num_points.hpp:26:0,
>                  from 
> /usr/local/include/boost/geometry/algorithms/detail/throw_on_empty_input.hpp:15,
>                  from 
> /usr/local/include/boost/geometry/algorithms/distance.hpp:29,
>                  from 
> /usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
>                  from 
> /usr/local/include/boost/geometry/strategies/strategies.hpp:33,
>                  from /usr/local/include/boost/geometry/geometry.hpp:35,
>                  from 
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
>                  from foo.cc:1:
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp: In function 
> 'bool boost::geometry::disjoint(const Geometry1&, const Geometry2&) 
> [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]':
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:   
> instantiated from 'bool boost::geometry::intersects(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const 
> G1&, const G2&) [with G1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const 
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag = 
> boost::geometry::index::detail::intersects_tag, 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag, 
> First, Last>::apply(const Predicate&, const Value&, const Indexable&) 
> [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Predicate = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24: 
>   instantiated from 'bool 
> boost::geometry::index::detail::predicates_check(const Predicates&, 
> const Value&, const Indexable&) [with Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u, Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Value = int, 
> Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13: 
>   instantiated from 'void 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::operator()(const internal_node&) [with Value = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Options = 
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>, 
> boost::geometry::index::detail::rtree::insert_reinsert_tag, 
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag, 
> boost::geometry::index::detail::rtree::split_default_tag, 
> boost::geometry::index::detail::rtree::rstar_tag, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Translator = 
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, Box = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Allocators = 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, OutIter = 
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::internal_node = 
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, 
> boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1:   instantiated from here
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80: 
> error: no type named 'type' in 'struct 
> boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, MyFrustum>'
> In file included from 
> /usr/local/include/boost/geometry/core/coordinate_system.hpp:20:0,
>                  from /usr/local/include/boost/geometry/core/cs.hpp:21,
>                  from /usr/local/include/boost/geometry/geometry.hpp:19,
>                  from 
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
>                  from foo.cc:1:
> /usr/local/include/boost/geometry/core/point_type.hpp: At global scope:
> /usr/local/include/boost/geometry/core/point_type.hpp: In 
> instantiation of 'boost::geometry::traits::point_type<MyFrustum>':
> /usr/local/include/boost/geometry/core/point_type.hpp:66:17:   
> instantiated from 'boost::geometry::core_dispatch::point_type<void, 
> MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:58:8: 
>   instantiated from 'boost::geometry::core_dispatch::dimension<void, 
> MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:74:8: 
>   instantiated from 'boost::geometry::dimension<const MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1: 
>   instantiated from 'void boost::geometry::assert_dimension_equal() 
> [with G1 = const 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = const MyFrustum]'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5: 
>   instantiated from 'void 
> boost::geometry::concept::check_concepts_and_equal_dimensions() [with 
> Geometry1 = const 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5:   [ 
> skipping 2 instantiation contexts ]
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const 
> G1&, const G2&) [with G1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const 
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag = 
> boost::geometry::index::detail::intersects_tag, 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag, 
> First, Last>::apply(const Predicate&, const Value&, const Indexable&) 
> [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Predicate = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24: 
>   instantiated from 'bool 
> boost::geometry::index::detail::predicates_check(const Predicates&, 
> const Value&, const Indexable&) [with Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u, Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Value = int, 
> Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13: 
>   instantiated from 'void 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::operator()(const internal_node&) [with Value = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Options = 
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>, 
> boost::geometry::index::detail::rtree::insert_reinsert_tag, 
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag, 
> boost::geometry::index::detail::rtree::split_default_tag, 
> boost::geometry::index::detail::rtree::rstar_tag, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Translator = 
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, Box = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Allocators = 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, OutIter = 
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::internal_node = 
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, 
> boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1:   instantiated from here
> /usr/local/include/boost/geometry/core/point_type.hpp:45:5: error: no 
> matching function for call to 
> 'assertion_failed(mpl_::failed************ 
> (boost::geometry::traits::point_type<MyFrustum>::NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE::************)(mpl_::assert_::types<MyFrustum, 
> mpl_::na, mpl_::na, mpl_::na>))'
> /usr/local/include/boost/geometry/core/point_type.hpp:45:5: note: 
> candidate is:
> /usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C> 
> int mpl_::assertion_failed(typename mpl_::assert<C>::type)
> /usr/local/include/boost/geometry/core/point_type.hpp: In 
> instantiation of 'boost::geometry::core_dispatch::point_type<void, 
> MyFrustum>':
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:58:8: 
>   instantiated from 'boost::geometry::core_dispatch::dimension<void, 
> MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:74:8: 
>   instantiated from 'boost::geometry::dimension<const MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1: 
>   instantiated from 'void boost::geometry::assert_dimension_equal() 
> [with G1 = const 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = const MyFrustum]'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5: 
>   instantiated from 'void 
> boost::geometry::concept::check_concepts_and_equal_dimensions() [with 
> Geometry1 = const 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5:   
> instantiated from 'bool boost::geometry::disjoint(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:   
> instantiated from 'bool boost::geometry::intersects(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const 
> G1&, const G2&) [with G1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const 
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag = 
> boost::geometry::index::detail::intersects_tag, 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag, 
> First, Last>::apply(const Predicate&, const Value&, const Indexable&) 
> [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Predicate = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24: 
>   instantiated from 'bool 
> boost::geometry::index::detail::predicates_check(const Predicates&, 
> const Value&, const Indexable&) [with Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u, Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Value = int, 
> Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13: 
>   instantiated from 'void 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::operator()(const internal_node&) [with Value = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Options = 
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>, 
> boost::geometry::index::detail::rtree::insert_reinsert_tag, 
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag, 
> boost::geometry::index::detail::rtree::split_default_tag, 
> boost::geometry::index::detail::rtree::rstar_tag, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Translator = 
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, Box = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Allocators = 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, OutIter = 
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::internal_node = 
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, 
> boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1:   instantiated from here
> /usr/local/include/boost/geometry/core/point_type.hpp:66:17: error: no 
> type named 'type' in 'struct 
> boost::geometry::traits::point_type<MyFrustum>'
> In file included from 
> /usr/local/include/boost/geometry/geometries/concepts/point_concept.hpp:22:0,
>                  from 
> /usr/local/include/boost/geometry/arithmetic/arithmetic.hpp:23,
>                  from /usr/local/include/boost/geometry/geometry.hpp:32,
>                  from 
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
>                  from foo.cc:1:
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp: In 
> function 'void boost::geometry::assert_dimension_equal() [with G1 = 
> const boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, G2 = const MyFrustum]':
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5: 
>   instantiated from 'void 
> boost::geometry::concept::check_concepts_and_equal_dimensions() [with 
> Geometry1 = const 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5:   
> instantiated from 'bool boost::geometry::disjoint(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:   
> instantiated from 'bool boost::geometry::intersects(const Geometry1&, 
> const Geometry2&) [with Geometry1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const 
> G1&, const G2&) [with G1 = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const 
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag = 
> boost::geometry::index::detail::intersects_tag, 
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry, 
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62: 
>   instantiated from 'static bool 
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag, 
> First, Last>::apply(const Predicate&, const Value&, const Indexable&) 
> [with Value = int, Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Predicate = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24: 
>   instantiated from 'bool 
> boost::geometry::index::detail::predicates_check(const Predicates&, 
> const Value&, const Indexable&) [with Tag = 
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u, 
> unsigned int Last = 1u, Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, Value = int, 
> Indexable = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13: 
>   instantiated from 'void 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::operator()(const internal_node&) [with Value = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Options = 
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>, 
> boost::geometry::index::detail::rtree::insert_reinsert_tag, 
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag, 
> boost::geometry::index::detail::rtree::split_default_tag, 
> boost::geometry::index::detail::rtree::rstar_tag, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Translator = 
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, Box = 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, Allocators = 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> Predicates = 
> boost::geometry::index::detail::spatial_predicate<MyFrustum, 
> boost::geometry::index::detail::intersects_tag, false>, OutIter = 
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > > >, 
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value, 
> Options, Translator, Box, Allocators, Predicates, 
> OutIter>::internal_node = 
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> >, 
> boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float, 
> 2ul, boost::geometry::cs::cartesian> > >, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>, 
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul, 
> boost::geometry::cs::cartesian> >, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>, 
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1:   instantiated from here
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1: 
> error: no type named 'type' in 'struct 
> boost::geometry::dimension<const MyFrustum>'
>
>
>
>
> On Fri, Mar 28, 2014 at 10:00 PM, Adam Wulkiewicz 
> <adam.wulkiewicz_at_[hidden] <mailto:adam.wulkiewicz_at_[hidden]>> wrote:
>
>     Hi Michael,
>
>     Michael Nett wrote:
>>     Hello,
>>
>>     We're considering using Boost.Geometry in one of our projects,
>>     but we require the ability to query an index using a super set of
>>     the geometric shapes provided by the library (frustum, conical
>>     frustums and complex geometry).
>>
>>     We have tried implementing template specializations as discussed
>>     in this thread
>>     (http://stackoverflow.com/questions/19490435/boost-geometry-spatial-query-shapes).
>>
>>     namespace boost { namespace geometry {
>>     template <typename Box> inline
>>     bool intersects(Box const& b, MyFrustum const& f)
>>     {
>>         // your implementation
>>     }
>>     }}
>>
>>     However, compiling this provides the following error.
>>
>>     /usr/include/boost/geometry/core/point_type.hpp:45:5: error: no
>>     matching function for call to
>>     'assertion_failed(mpl_::failed************
>>     (boost::geometry::traits::point_type<MyGeometry>::NOT_IMPLEMENTED_FOR_THIS_POIN?
>>     T_TYPE::************)(mpl_::assert_::types<MyGeometry, mpl_::na,
>>     mpl_::na, mpl_::na>))'
>>
>>     I tried digging into the source files, but my understanding of
>>     the geometry library is too limited to figure out what's going on.
>>
>>     Can anyone advise on how to approach the problem?
>>
>
>     This assertion fails if you try to get a point_type for the type
>     which is not adapted to any of the Boost.Geometry concepts. So you
>     must call something like geometry::point_type<MyGeometry>::type or
>     pass an object of MyGeometry to one of the existing functions of
>     Boost.Geometry which tries to use is as a properly adapted Geometry.
>
>     Did you check if your implementation of intersects() work without
>     the rtree?
>
>     Btw, what's the Value type stored in the rtree?
>
>     Below is the fully working (for me) example, maybe it will help
>     you to find the cause:
>
>     #include <boost/geometry/index/rtree.hpp>
>
>     struct MyFrustum
>     {
>         MyFrustum(int d) : dummy(d) {}
>         int dummy;
>     };
>
>     namespace boost { namespace geometry {
>
>     // This will be called for Nodes Bounds and Indexables!
>
>     template <typename Box> inline
>     bool intersects(Box const& b, MyFrustum const& f)
>     {
>         std::cout << "checking the intersection with " << f.dummy <<
>     std::endl;
>         return true;// always intersects
>     }
>
>     }}
>
>     int main()
>     {
>         namespace bg = boost::geometry;
>         namespace bgi = bg::index;
>         namespace bgm = bg::model;
>         typedef bgm::point<float, 2, bg::cs::cartesian> pt;
>         typedef bgm::box<pt> box;
>
>         // check your implementation
>         bool ok = bg::intersects(box(pt(0, 0), pt(1, 1)), MyFrustum(5));
>
>         std::cout << "-------------------" << std::endl;
>
>         // now use the rtree
>         bgi::rtree<box, bgi::rstar<8> > rt;
>         // insert some values
>         rt.insert(box(pt(0, 0), pt(1, 1)));
>         rt.insert(box(pt(2, 2), pt(3, 3)));
>
>         // performa a query
>         std::vector<box> vec;
>         rt.query(bgi::intersects(MyFrustum(10)), std::back_inserter(vec));
>
>         std::cout << vec.size() << std::endl;
>     }
>
>     The above should print:
>
>     checking the intersection with 5
>     -------------------
>     checking the intersection with 10
>     checking the intersection with 10
>     2
>
>     Let me know if it helps.
>
>     Regards,
>     Adam
>
>     _______________________________________________
>     Geometry mailing list
>     Geometry_at_[hidden] <mailto:Geometry_at_[hidden]>
>     http://listarchives.boost.org/mailman/listinfo.cgi/geometry
>
>
>
>
> _______________________________________________
> Geometry mailing list
> Geometry_at_[hidden]
> http://listarchives.boost.org/mailman/listinfo.cgi/geometry