Re: how to boost::range_size work?
chuchelo@gmail.com wrote:
"""Clark S. Cox III ?????(?):
"""
How? (Except on a broken compiler)
yeah, I've got such behavior on gcc4.1 on some types of T
Do you have an exact example? And what happened (error at
compile, or doing the wrong thing at run-time)?
In the past, compilers often did have problems with overload
sets involving templates. But I've never seen one which would
call an otherwise impossible function. And g++ 4.1 is hardly
"in the past".
Or are you perhaps confusing the issue with the fact that
something like:
std::vector< int > v( 10, 42 ) ;
will call the templated vector<int>::vector( InputIterator,
InputIterator ) overload. The standard requires that the
InputIterator resolves to an integral type (a type which does
not qualify as an InputIterator, in the latest draft, but I
think the original standard said integral type), the templated
constructor have the same behavior as if the constructor had
been invoked as:
std::vector< int > v( static_cast< size_t >( 10 ), 42 ) ;
instead. (Again, I'm actually looking at the latest draft; I
think the original standard cast the second argument to the
contained type as well. This makes a difference in actual code;
according to the original standard:
std::vector< std::vector< int > > v( 10, 42 ) ;
defined a two dimensional array of [10][42]---according to the
draft I'm looking at, this definition would be illegal.)
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]