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