Silence some GCC warnings
Rewrite static_asserts on std::array::size().
gcc doesn't accept calling the function, whereas clang does.
Replaced with tuple_size<>
gcc doesn't accept string literals in a decltype expression.
Replaced with declval
Make sure array is zero initialised & therefore terminated