When answering this SO question, I found in the Standard (already C++03, still in C++11) that you can only use addresses as non-type template arguments if they\'re of the fo
constexpr, since the value of an address cannot be known at compile time; in most cases it will only be fixed after relocation prior to execution.&arr[i] instead of arr + i.