I doubt it's compliant. The declaration and definition are required to be identical AFAIK.
It's certainly not portable. Although gcc, clang and microsoft cl 2017 accept it,
ICC reports:
(6): error: member "Foo::IntArray" (declared at line 3) was previously not declared constexpr
constexpr int Foo::IntArray[] = { 1, 2, 3, 4 };
^
compilation aborted for (code 2)
Compiler exited with result code 2