Two pointers can be compared with using the comparison function objects less
, greater
etc. Otherwise, using blanket operator<
etc, this is only possible if the pointers point to elements of the same array object or one past the end. Otherwise, results are unspecified.
20.3.3/8
in C++03
For templates
greater
,less
,greater_equal
, andless_equal
, the specializations for any
pointer type yield a total order, even if the built-in operators<
,>
,<=
,>=
do not.
No need to explicitly specialize and manually casting to size_t
: That would lower the portability even, since the mapping of reinterpret_cast
from pointers to integers is implementation defined and is not required to yield any order.
Edit: For a more detailed answer, see this one.