Как полностью упорядочить указатели?
В целом, указатели в C ++ могут сравниваться только на равенство. Напротив, сравнение меньше, чем допустимо, только для двух указателей, которые указывают на подобъекты одного и того же законченного объекта (например, элементов массива).
Так даноT * p, * q
, это вообще незаконно оцениватьp < q
.
Стандартная библиотека содержит шаблоны классов функторовstd::less<T>
и т.д., которые обертывают встроенный оператор<
, Однако в стандарте есть, что сказать о типах указателей (20.8.5 / 8):
Для шаблоновgreater
, less
, greater_equal
, а такжеless_equal
, специализации для любого типа указателя дают общий порядок, даже если встроенные операторы<
, >
, <=
, >=
не надо.
Как это можно реализовать? Возможно ли вообще это реализовать?
Я взглянул на GCC 4.7.2 и Clang 3.2, которые не содержатЛюбые специализация для типов указателей вообще. Кажется, они зависят от<
быть действительным безоговорочно на всех поддерживаемых платформах.