Home

In message <famirb$bsv$1@news.datemas.de>, Victor Bazarov
<v.Abazarov@comAcast.net> writes
>phdscholar80@yahoo.com wrote:
>> I am using the following code:
>>
>> #include <vector>
>> #include <algorithm>
>>
>> class A
>> {
>> };
>>
>> bool comparator( A * b, const char * a )
>> {
>> // return appropriate true/false value
>> }
>>
>> int main( int argc, char * argv[] )
>> {
>> std::vector< A * > vt;
>> const char * p = "a";
>>
>> std::lower_bound( vt.begin(), vt.end(), p, comparator );
>>
>> return 0;
>> }
>>
>> Note that the second argument of the comparator function is the same
>> as 'p', the 'object' that is being provided. Is this a standard
>> compliant technique? If not, shouldn't the standard allow this? It
>> comes in useful in a LOT of situations. (Incase you are wondering,
>> this worked perfectly on Visual Studio 2003 but doesn't work on Visual
>> Studio 2005 with SP1).
>
>I couldn't find any direct set of requirements for the 'Compare' argument
>of 'lower_bound' template except that the container "should be partitioned
>with respect to 'comp(e, value)'", where 'comp' is your 'comparator'.
>Whether this requires the 'comparator' to be callable with 'a' and 'b'
>reversed (that's what Visual C++ requires, and that's why it fails) is
>open to interpretation.
>
I've tripped over this one as well.

IIRC the reason for VS2005 behaving this way is that (in debug mode) the
library does some run-time tests that the comparison really is a strict
weak ordering, by verifying that comp(a, b) and comp(b, a) are not both
true.

--
Richard Herring

previous
next

Re: Python 3.0 migration plans?
Re: assert( 'µ' == -75 )
Re: vector<string> to char*[]
Re: Ambiguous constructor call
Re: Python "with"
Nasze Dzieci
Pajacyk
Dzieci Niczyje
Fundacja Hobbit
Mimo Wszystko