We currently need a STATIC_ASSERT macro to catch errors at compile time. The macro should produce very user friendly output; implementations that have cryptic error messages are unacceptable. The macro implementation must also work from both inside and outside of function scope.