
Jan Gaspar wrote:
Hi Fredrik,
I'm attaching the discussion during the formal review regarding the comparison operators. Thanks. I now remember reading some of those posts. Did you reach a conclusion then? (Guess I have to dig the archives a bit...)
into the reading, I'd like to say that my intension was to write STL compliant container nothing less or more and I'd like to stick with this. That's a goal I fully support! But to my understanding making this change wouldn't compromise compliance (?). And as mentioned, several other boost components already use this scheme, in this context most notably multi-index.
Regards // Fredrik Blomqvist
Subject: RE: [boost] Formal Review: Circular Buffer Date: Tue, 9 Mar 2004 09:44:34 -0800 From: "Powell, Gary" <powellg@amazon.com> To: boost@lists.boost.org
Shouldn't the comparison functions allow the types to differ? I mean don't they still lexigraphically compare as long as there is a comparison function F that a F b for each element exists
circular_buffer<T, MyAlloc> x; circular_buffer<S, YourAlloc> y;
bool b = x == y; for where the operator T == S is valid? And what does the allocator have to do with it?
Therefore IMO, all of the comparison functions should change from
template< typename T, typename Alloc> bool operator F ( circular_buffer<T, Alloc> &lhs, circular_buffer<T, Alloc> &rhs);
to
template< typename T1, typename Alloc1, typename T2, typename Alloc2> bool operator F ( circular_buffer<T1, Alloc1> &lhs, circular_buffer<T2, Alloc2> &rhs);
Yours, -Gary-
-----------------------------------------------
To: boost@lists.boost.org From: "Pavel Vozenilek" <pavel_vozenilek@hotmail.com>
Date: Tue, 9 Mar 2004 20:52:29 +0100 Subject: [boost] Re: Formal Review: Circular Buffer
Hmm, do you know a STL implementation/some container with this feature? It may be often bug to compare containers with different types.
/Pavel
-----------------------------------------------------
Subject: RE: [boost] Re: Formal Review: Circular Buffer Date: Tue, 9 Mar 2004 13:55:15 -0800 From: "Powell, Gary" <powellg@amazon.com> To: boost@lists.boost.org
No, but just because the standard libraries scr*wed up is no reason to perpetuate the mistake.
It's the rule of unexpected consequences.
Is circular_buffer<int> x = { 1, 2, 3}; circular_buffer<short> y = { 1, 2 ,3};
x == y ?? or not?
Sure looks like it should work.
The VTL library does it IMO correctly, allowing that if there is an operation T1 F T2, then V1 F V2 compiles. Otherwise you just force the user to write what should be library code.