Jak można całkowicie uporządkować wskaźniki?
Wskaźniki w C ++ mogą być generalnie porównywane tylko dla równości. Natomiast mniej niż porównanie jest dozwolone tylko dla dwóch wskaźników, które wskazują podobiekty tego samego kompletnego obiektu (np. Elementy tablicy).
Tak daneT * p, * q
, ocenianie jest ogólnie nielegalnep < q
.
Biblioteka standardowa zawiera szablony klas funktorastd::less<T>
itp., które zawijają wbudowanego operatora<
. Jednak standard ma to do powiedzenia na temat typów wskaźników (20.8.5 / 8):
Dla szablonówgreater
, less
, greater_equal
, iless_equal
Specjalizacje dla dowolnego typu wskaźnika dają całkowitą kolejność, nawet jeśli operatory wbudowane<
, >
, <=
, >=
nie rób.
Jak można to zrealizować? Czy jest to nawet możliwe do wdrożenia?
Przyjrzałem się GCC 4.7.2 i Clang 3.2, które nie zawierająkażdy specjalizacja dla typów wskaźników w ogóle. Wydaje się, że zależą od<
ważne bezwarunkowo na wszystkich obsługiwanych platformach.