C++ Logo

SG12

Advanced search

Subject: Re: [ub] Justification for < not being a total order on pointers?
From: Gabriel Dos Reis (gdr_at_[hidden])
Date: 2013-10-16 10:27:45


| -----Original Message-----
| From: ub-bounces_at_[hidden] [mailto:ub-bounces_at_[hidden]] On Behalf
| Of Nevin Liber
| Sent: Wednesday, October 16, 2013 8:15 AM
| To: WG21 UB study group
| Subject: Re: [ub] Justification for < not being a total order on pointers?
|
| On 15 October 2013 18:14, Gabriel Dos Reis <gdr_at_[hidden]
| <mailto:gdr_at_[hidden]> > wrote:
|
|
| Nevin --
| Are you asking that operator< be a total order on std::deque<T>::iterator?
|
|
|
| No, although the only sentence I can find in n3797 not requiring it today is in
| iterator requirements in general 24.2.1p7: "The result of the application of
| functions in the library to invalid ranges is undefined" and assuming that
| operator< has to be implemented with a function so that the assertion in table 111
| that "< is a total ordering relation" only holds for valid ranges.
|
|
| My goal is that for two objects l and r of type T, 'std::less<T>(l, r)', 'std::less<>(l, r)'
| and 'l < r' should never diverge,

I am not sure expect what you mean by "diverge". I am hoping you aren't arguing
that std::less should just be a different syntax for operator<.

That said, I am unsure how you answer "no" above squares with your goal
as stated here.

My own personal view (not that of chair) is that if std::less<T>(l,r) and "l < r" are
both defined, then they should yield the same answer.

| because anything else makes usage expert-only.

I suspect you are making the bar to expert level pretty low :-)

-- Gaby


SG12 list run by herb.sutter at gmail.com