Vladimir Prus <[EMAIL PROTECTED]> writes: > David Abrahams wrote: >> Vladimir Prus <[EMAIL PROTECTED]> writes: > >>>I'd prefer the latter variant, so that non-broken platforms use more natural >>>syntax. Another question is whether we could use only the second version. >>>Theoretically, if you call the second version on const string, then InputT >>>should be deduced as "const string". You can then write a simple wrapper to >>>select const_iterator or iterator. >>> >>>The only problem is, IIRC, borland drops "const" on template arguments >>>sometimes, and that's not possible to fix. Also, the "simple wrapper" >>>requires partial specialization. So, I'm not sure this approach is >>>viable, either. >> There are mostly-transparent solutions. Something like: >> // find_first sequence const version >> template< typename InputT, typename SearchT > >> inline iterator_range< typename InputT::const_iterator > >> find_first_impl( const InputT& Input, const SearchT& Search, 0 ) >> { >> ... >> } > > I'm guessing the last parameter should be "int"?
No, sorry. It should be "..." >> // find_first sequence non-const version >> template< typename InputT, typename SearchT > >> inline iterator_range< typename InputT::const_iterator > >> find_first_impl( InputT& Input, const SearchT& Search, int ) >> { >> ... >> } >> // find_first sequence >> template< typename InputT, typename SearchT > >> inline iterator_range< typename InputT::iterator > >> find_first( InputT& Input, const SearchT& Search ) >> { >> find_first_impl(Input, Search, 0); >> } >> Should work on vc6. Can't vouch for Borland, though :( > > Unfortunately, "first_first" will return the same plain (non-const) iterator > in all cases. And we'd need to return const_iterator when string is const. OK, let me fix that: // find_first sequence template< typename InputT, typename SearchT > inline iterator_range< typename mpl::if_< is_const<InputT> , typename InputT::const_iterator , typename InputT::iterator >::type > find_first( InputT& Input, const SearchT& Search ) { find_first_impl(Input, Search, 0); } Looking at the name of the function, it occurs to me that dispatching to separate implementations might not be needed. The only restriction on this one is that it doesn't work when the Input parameter is an non-const rvalue. -- David Abrahams [EMAIL PROTECTED] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost