Fix g++-6 constexpr and c++20 constexpr build errors.
Apparently g++-6 requires that all variables in a constexpr function need to be initialized on construction.
Also added more constexpr
labels that are required post c++20.
And clang has a bug for consteval
that claims it's not a contexpr (https://stackoverflow.com/questions/63364918/clang-says-call-to-void-consteval-function-is-not-a-constant-expression). Re-wrote the assert_constexpr
"function" using template parameter and macro.
Fixes #2536 (closed)