According to 7.6.9 [expr.rel] paragraph 2, describing pointer comparisons,
Pointer conversions (7.3.12 [conv.ptr]) and qualification conversions (7.3.6 [conv.qual]) are performed on pointer operands (or on a pointer operand and a null pointer constant, or on two null pointer constants, at least one of which is non-integral) to bring them to their composite pointer type.
This would appear to make the following example ill-formed,
bool foo(int** x, const int** y) {
return x < y; // valid ?
}
because int** cannot be converted to const int**, according to the rules of 7.3.6 [conv.qual] paragraph 4. This seems too strict for pointer comparison, and current implementations accept the example.