I have seen it asserted several times now that the following code is not allowed by the C++ Standard:
int array[5]; int *array_begin = &array[0]; int *ar
It is perfectly legal.
The vector<> template class from the stl does exactly this when you call myVec.end(): it gets you a pointer (here as an iterator) which points one element past the end of the array.