
31 Dec
2005
31 Dec
'05
9:36 a.m.
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 )
I think something like template< typename T > enable_if< is_same< T, char >, const char* >::type boost_range_end( const T* s ) for the second overload should fix it. Regards, Daniel