
Eric Niebler <eric <at> boost-consulting.com> writes:
Thorsten Ottosen wrote:
Btw, my range_size uses this code
template< class T > struct add_unsigned;
Can anybody spot weaknesses in that approach?
Well, you haven't defined a primary template, so add_unsigned<unsigned> will not compile. IMO, your primary template should "typedef T type;". But depending on what you're trying to do, this may work, and it's a lot shorter:
template< typename Int > struct add_unsigned { typedef typename boost::uint_t< sizeof(Int) * CHAR_BIT >::least type; };
right, it shorter. I wanted to remove the need for specializing range_size<> but apparently this relation does not hold for all implementations: sizeof( container::size_type ) == sizeof( container::iterator::difference_type ) :-( what a shame. -Thorsten