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

Reply via email to