5.9.7 (реляционные операторы): «Другие сравнения указателей не определены».
Так как 5.9 неясен (он имеет дело с функциями, но не является явно функциями-членами), быстрый взгляд на 5.10 (сравнение равенства) четко отделяет функции от функций-членов :
Кроме того, можно сравнивать указатели на элементы или указатель на
член и константа нулевого указателя. Указатель на членство преобразований
(4.11) и квалификационные преобразования (4.4) выполняются, чтобы привести их
к общему типу. Если один операнд является константой нулевого указателя,
общий тип - это тип другого операнда. В противном случае, общее
тип - указатель на тип члена, аналогичный (4.4) типу одного из
операнды с квалификационной подписью cv (4.4), которая является
объединение cv-квалификационных сигнатур типов операндов. [Заметка:
это означает, что любой указатель на член можно сравнить с нулевым
константа указателя. ] Если оба операнда равны нулю, они сравниваются одинаково.
В противном случае, если только один равен нулю, они сравниваются неравно. В противном случае, если
либо указатель на виртуальную функцию-член, результат
неопределенные. В противном случае они сравниваются равными, если и только если они
относятся к тому же члену того же самого производного объекта (1.8) или
тот же подобъект, если они были разыменованы с гипотетическим объектом
связанный тип класса.
Таким образом, вы можете использовать операторы, значение ==
и !=
указано, но значение <
, >
, <=
и >=
не указано.
В частности, ничего не навязывает транзитивность, поэтому неясно, нормально ли их помещать в набор.