
Maybe add these: template<typename range_type> inline bounded_iterator<typename boost::range_iterator<range_type>::type> make_bounded_iterator (range_type & r) { return bounded_iterator<typename boost::range_iterator<range_type>::type> (r); } template<typename range_type> inline bounded_iterator<typename boost::range_iterator<range_type>::type> make_bounded_iterator (range_type const& r) { return bounded_iterator<typename boost::range_iterator<range_type>::type> (r); } Now you can do: template<typename out_t, typename in_t> inline out_t Map (in_t const& in) const { out_t out (boost::size (in)); typename boost::range_iterator<out_t>::type o = boost::begin (out); typename bounded_iterator_type<in_t>::type i = make_bounded_iterator<in_t> (in); for (; i; ++i, ++o) *o = Map1 (*i); return out; }