If a constexpr
function is not defined inside the header, the compiler can not see the definition of the constexpr
functions while compiling all the other source files.
Obviously, if it can’t see the definition of the functions, it can’t perform the steps necessary to calculate them at compile-time. Thus all constexpr
functions must be defined everywhere they are used.
Thanks @IgorTandetnik:
[dcl.constexpr] §7.1.5/2
constexpr
functions andconstexpr
constructors are implicitly inline.
[basic.def.odr] §3.2/4
An inline function shall be defined in every translation unit in which it is odr-used.