AFAIK sizeof не оценивает свои операнды на С++.
например.
int x = 0;
sizeof(x += 1); // value of x is not changed
Но что это значит?
int arr[5];
sizeof(arr+0); // here array is converted to pointer
Почему здесь применяется арифметика в массиве?
(§ 5.3.3/4) Значение lvalue-to-rvalue (4.1), массив-указатель (4.2) и Стандартные преобразования по функциям-к-указателю (4.3) не применяются к операнд sizeof.