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