From: MB (mb2act_at_[hidden])
Date: 2005-12-31 22:41:31


Eric Niebler wrote:
> There is a bug in Boost.Range that is causing boost::end() to execute a
> slower code path when called with a string literal. The type of "hello"
> is char const [6], and end() should be O(1). Indeed, Boost.Range has
> code to handle just this case, but it never gets called. The problem is
> the way overload resolution happens between these two functions
>
> template< typename T, std::size_t sz >
> const T* boost_range_end( const T (&array)[sz] )
>
> const char* boost_range_end( const char* s )
>
> The first is O(1) and the second is O(N) becuase it calls strlen. But
> the second will always be chosen because non-templates are preferred
> over templates.
>

I guess that is intentional.
See: boost::end("hello\0secret")

BTW, '#define foreach BOOST_FOREACH' causes name conflict with Boost.Foreach. :-)

Regards,
MB
p-stade.sourceforge.net