Constant variables of integral types with constant initializers are integral constant expressions (de facto implicitely constexpr
; see expr.const in ISO C++). float
is not an integral type and does not meet the requirements for constant expression without the use of constexpr
. (A similar case is why int
can be but float
cannot be a template parameter.)