[Patch] First bits of the algo merge
Howard Hinnant
hhinnant@apple.com
Thu Dec 15 18:18:00 GMT 2005
On Dec 15, 2005, at 12:41 PM, chris jefferson wrote:
> Howard Hinnant wrote:
>>
>> Such an iterator would only qualify as an input iterator, but
>> otherwise I think would be conforming, reference 24.1.1p2, table row:
>>
>> *a convertible to T
>>
> The issue of exactly what convertible to T should cover is library
> issue
> 484, it looks like the whole issue is "up in the air" and there is say
> exactly what is supposed to work (in particular, is it "our job" to
> force conversion to the value_type or not), and what isn't, is
> supposed
> to be handled as part of the iterator redesign.
>
>
> Chris
<nod> I assume you are the same Chris as the submitter of this dr
(if you like I can add your last name to this and any other dr's if
that's the case)?
I tend to agree with your latter statement:
> I am personally tempted to say that any iterator where "*a == *b"
> doesn't work is probably so broken we shouldn't be going to the effort
> to force it to work...
Indeed that was my motivation for adding METHOD_C, which simply does
"*a == *b". Which you inspired with your earlier post:
> While making this work could very well be a reasonable goal, I notice
> that if I replace the calls to equal with std::equal, defined in the
> obvious way:
>
> template<typename _InputIterator1, typename _InputIterator2>
> inline bool
> equal(_InputIterator1 __first1, _InputIterator1 __last1,
> _InputIterator2 __first2)
> {
> for (; __first1 != __last1; ++__first1, ++__first2)
> if (!(*__first1 == *__first2))
> return false;
> return true;
> }
>
> Then this proxy iterator doesn't work, so we aren't breaking anything
> that worked before...
Imho, it is the gold standard by which our efforts must be measured.
If METHOD_C allows it, we probably should too. If METHOD_C allows
it, and it is conforming, then I think we have no choice but to allow
it.
It is the second part of 484 that the lwg found most alarming:
> while(a!=b && *a!=0)
I.e., what happens with operator== (perhaps as the proxy defines it)
doesn't return bool (only convertible to bool)? This is also a
concern apart from proxies, or even apart from iterators. I think
the basic question from the second part of 484 is:
Should we mandate that overloaded logical operators return bool? If
not, how much leeway do we give such operators?
The lazy part of me just wants to mandate returning bool. :-)
-Howard
More information about the Libstdc++
mailing list