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"?
// 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.
- Volodya
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost