Functions can only be declared constexpr
if they obey the rules for constexpr
— no dynamic casts, no memory allocation, no calls to non-constexpr
functions, etc.
Declaring a function in the standard library as constexpr
requires that ALL implementations obey those rules.
Firstly, this requires checking for each function that it can be implemented as constexpr
, which is a long job.
Secondly, this is a big constraint on the implementations, and will outlaw many debugging implementations. It is therefore only worth it if the benefits outweigh the costs, or the requirements are sufficiently tight that the implementation pretty much has to obey the constexpr
rules anyway. Making this evaluation for each function is again a long job.