Согласно проекту C++ expr.add, когда вы вычитаете указатели одного типа, но не принадлежащие одному и тому же массиву, поведение не определено (выделение мое):
Когда два выражения указателя P и Q вычитаются, тип результата является определяемым реализацией знаковым целочисленным типом; этот тип должен быть того же типа, который определен как std :: ptrdiff_t в заголовке ([support.types]).
- Если P и Q оба имеют нулевые значения указателя, результат равен 0. (5.2)
В противном случае, если P и Q указывают соответственно на элементы x [i] и x [j] одного и того же объекта массива x, выражение P - Q имеет значение i-j.
В противном случае поведение не определено. [Примечание: если значение i-j не находится в диапазоне представимых значений типа std :: ptrdiff_t, поведение не определено. - конец примечания]
Каково обоснование для того, чтобы сделать такое поведение неопределенным, например, не определяемым реализацией?