diff options
Diffstat (limited to 'boost/geometry/algorithms/detail/sub_range.hpp')
-rw-r--r-- | boost/geometry/algorithms/detail/sub_range.hpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/boost/geometry/algorithms/detail/sub_range.hpp b/boost/geometry/algorithms/detail/sub_range.hpp index a68f31362a..eda3ce58ba 100644 --- a/boost/geometry/algorithms/detail/sub_range.hpp +++ b/boost/geometry/algorithms/detail/sub_range.hpp @@ -44,7 +44,7 @@ struct sub_range<Geometry, Tag, false> template <typename Geometry> struct sub_range<Geometry, polygon_tag, false> { - typedef typename geometry::ring_type<Geometry>::type & return_type; + typedef typename geometry::ring_return_type<Geometry>::type return_type; template <typename Id> static inline return_type apply(Geometry & geometry, Id const& id) @@ -55,7 +55,11 @@ struct sub_range<Geometry, polygon_tag, false> } else { - std::size_t ri = static_cast<std::size_t>(id.ring_index); + typedef typename boost::range_size + < + typename geometry::interior_type<Geometry>::type + >::type size_type; + size_type const ri = static_cast<size_type>(id.ring_index); return range::at(geometry::interior_rings(geometry), ri); } } @@ -81,7 +85,9 @@ struct sub_range<Geometry, Tag, true> return_type apply(Geometry & geometry, Id const& id) { BOOST_ASSERT(0 <= id.multi_index); - return sub_sub_range::apply(range::at(geometry, id.multi_index), id); + typedef typename boost::range_size<Geometry>::type size_type; + size_type const mi = static_cast<size_type>(id.multi_index); + return sub_sub_range::apply(range::at(geometry, mi), id); } }; |