Re: Portability of comparing pointers to void
"Matthias Hofmann" <hofmann@anvil-soft.com> schrieb im Newsbeitrag
news:5ofg50Fmfjn1U1@mid.individual.net...
"Hyman Rosen" <hyrosen@mail.com> schrieb im Newsbeitrag
news:eobUi.22974$Qj3.7738@trndny01...
Matthias Hofmann wrote:
Meanwhile I did some further research on partial ordering, strict weak
ordering and total ordering and things are a little clearer for me now, but
there are still two things that keep me wondering:
1.) As far as I understand strict weak ordering, two elements of a set may
be incomparable as long as this incomparability relation is transitive. If
this is true, then the following should be fine?
#include <set>
template <class T> struct strict_weak_less;
template <> struct strict_weak_less<int>
{
bool operator()( int a, int b )
{
// Define any two elements
// to be incomparable unless
// they are equal.
return a != b;
}
};
int main()
{
std::set<int, strict_weak_less<int> > intset;
intset.insert( 2 );
intset.insert( 4 );
return 0;
}
This creates a set where all elements are incomparable with each other. (I
have searched for a real life example for a strict weak ordering that is
not
a total ordering, but I have not found any. Does anyone know an example?)
2.) Why does the standard require a strict weak ordering for associative
containers, but guarantee a total ordering for std::less<T*> in
20.3.3/8? In
a strict weak ordering, the relation "neither a < b nor b < a" is
transitive, but does not mean equality. Incomparability only means equality
in a total ordering, but doesn't an associative container need to know
whether two elements are equal in order to determine whether the element
already exists? Shouldn't the standard require a total ordering for
std::less for *any* type, not just for pointers?
--
Matthias Hofmann
Anvil-Soft, CEO
http://www.anvil-soft.com - The Creators of Toilet Tycoon
http://www.anvil-soft.de - Die Macher des Klomanagers
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]