Стандарт C ++ [sec 5.7] гласит:
Если и операнд указателя, и результат указывают на элементы одного и того же объекта массива или одного последнего
последний элемент объекта массива, оценка не должна производить переполнение; в противном случае поведение
не определено.
Итак, правильно ли я предположить, что указатели один за другим других типов, кроме массивов, не определены?
Например:
int a = 0;
vector<int> v(&a, (&a)+1);
Приведенный выше фрагмент компилируется и работает просто отлично (с g ++), но так ли это?
Нет, это законно. 5.7 (4) — один абзац перед вашей цитатой — гласит: «Для целей этих операторов указатель на объект без массива ведет себя так же, как указатель на
первый элемент массива длиной один с типом объекта в качестве его типа элемента. «
Других решений пока нет …