private: typedef typename token_range_detail::super_<Parser, ForwardRange, UserState>::type super_t; public: explicit token_range(ForwardRange& r, UserState& us = null_state) : super_t( biscuit::make_token_iterator<Parser>(boost::begin(r), boost::end(r), us), biscuit::make_token_iterator<Parser>(boost::end(r), boost::end(r), us) ) { } }; template< class Parser, class ForwardRange, class UserState > inline token_range<Parser, ForwardRange, UserState> const make_token_range(ForwardRange& r, UserState& us PSTADE_CONST_OVERLOADED(ForwardRange)) { return token_range<Parser, ForwardRange, UserState>(r, us); } template< class Parser, class ForwardRange, class UserState > inline token_range<Parser, PSTADE_DEDUCED_CONST(ForwardRange), UserState> const make_token_range(ForwardRange const& r, UserState& us) { return token_range<Parser, PSTADE_DEDUCED_CONST(ForwardRange), UserState>(r, us); } // no user-state template< class Parser, class ForwardRange > inline token_range<Parser, ForwardRange> const
namespace pstade_oven_extension { template< > struct Range< WTL::CString > { template< class X > struct associate { typedef TCHAR *mutable_iterator; typedef TCHAR const *constant_iterator; }; template< class Iterator, class X > Iterator begin(X& x PSTADE_CONST_OVERLOADED(X)) { return x.GetBuffer(0); } template< class Iterator, class X > Iterator begin(X const& x) { return x; } template< class Iterator, class X > Iterator end(X& x) { return begin<Iterator>(x) + x.GetLength(); }