::type fun( const P& p ) { return p.second; } }; }; ////////////////////////////////////////////////////////////////////// // array ////////////////////////////////////////////////////////////////////// template<> struct range_end { template< typename T > struct inner { static BOOST_DEDUCED_TYPENAME remove_extent::type* fun(T& t) { return t + remove_extent::size; } }; }; template<> struct range_end { template< typename T > struct inner { static BOOST_DEDUCED_TYPENAME remove_extent::type* fun(T& t) { return t + remove_extent::size; } }; }; template<> struct range_end { template< typename T > struct inner { static BOOST_DEDUCED_TYPENAME remove_extent::type* fun(T& t) { return t + remove_extent::size; } }; }; ////////////////////////////////////////////////////////////////////// // string ////////////////////////////////////////////////////////////////////// template<> struct range_end { template< typename T > struct inner { static char* fun( char* s ) { return boost::range_detail::str_end( s ); } }; }; template<> struct range_end { template< typename T > struct inner { static const char* fun( const char* s ) { return boost::range_detail::str_end( s ); } }; }; template<> struct range_end { template< typename T > struct inner { static wchar_t* fun( wchar_t* s ) { return boost::range_detail::str_end( s ); } }; }; template<> struct range_end { template< typename T > struct inner { static const wchar_t* fun( const wchar_t* s ) { return boost::range_detail::str_end( s ); } }; }; } // namespace 'range_detail' template< typename C > inline BOOST_DEDUCED_TYPENAME range_result_iterator::type end( C& c ) { return range_detail::range_end::type>::inner::fun( c ); } } // namespace 'boost' #endif