I use the following template to obtain a pointer pointing after the last element of an array:
template T* end_of(T (&array)[n])
You need a const version too. However, as far as I know, there's no actual problems with that approach- I see it used commonly.