@@ -242,25 +242,40 @@ template <class It>
242242struct deepest_local_iterator_impl <false , It>
243243{
244244 typedef It type;
245+ BOOST_CONTAINER_FORCEINLINE static type get (It it) { return it; }
245246};
246247
247248template <class It >
248249struct deepest_local_iterator_impl <true , It>
249250{
250- private:
251+ private:
252+
251253 typedef typename segmented_iterator_traits<It>::local_iterator local_t ;
252- public:
253- typedef typename deepest_local_iterator_impl<
254- segmented_iterator_traits<local_t >::is_segmented_iterator::value,
255- local_t >::type type;
254+ typedef deepest_local_iterator_impl
255+ < segmented_iterator_traits<local_t >::is_segmented_iterator::value
256+ , local_t > next_layer_t ;
257+
258+ public:
259+
260+ typedef typename next_layer_t ::type type;
261+
262+ BOOST_CONTAINER_FORCEINLINE static typename next_layer_t ::type get (It it)
263+ { return next_layer_t::get (segmented_iterator_traits<It>::local (it)); }
256264};
257265
258266template <class It >
259267struct deepest_local_iterator
260268{
261- typedef typename deepest_local_iterator_impl<
262- segmented_iterator_traits<It>::is_segmented_iterator::value,
263- It>::type type;
269+ typedef deepest_local_iterator_impl
270+ < segmented_iterator_traits<It>::is_segmented_iterator::value
271+ , It> next_layer_t ;
272+
273+ public:
274+
275+ typedef typename next_layer_t ::type type;
276+
277+ BOOST_CONTAINER_FORCEINLINE static typename next_layer_t ::type get (It it)
278+ { return next_layer_t::get (it); }
264279};
265280
266281} // namespace detail_algo
0 commit comments