В C/С++ сложение или вычитание указателя определяется только в том случае, если результирующий указатель лежит внутри исходного указателя полный объект. Более того, сравнение двух указателей может быть выполнено только в том случае, если два заостренных объекта являются подобъектами уникального полного объекта.
В чем причины таких ограничений?
Я предположил, что одной из причин может быть сегментированная модель памяти (см. здесь §1.2.1), но поскольку компиляторы могут фактически определить общий порядок на всех указателях, как показано в этом , я сомневаюсь в этом.