Initializing Static Members Constexpr Using Static Functions
Problem:
You want to define a constexpr member with a static function, initializing it with a computed value at compile time. However, you encounter compile errors attempting to do so in GCC.
Initial Attempts:
Your first attempt placed the static constexpr member and function within the class definition, triggering compile errors in older versions of GCC. Your second attempt moved these elements outside the class body, but again, you faced issues in later versions.
Explanation:
The C Standard dictates specific requirements for constexpr static data members. These members must be initialized using a brace-or-equal-initializer, where every assignment is a constant expression. In your "second attempt," you did not adhere to this format.
Solution:
Unfortunately, initializing a constexpr static data member using a static function is not currently possible according to the C Standard. This is because constexpr variables must be available as compile-time constants from within member function bodies. However, static functions are undefined until the class is complete, making it impossible for the expression to be a constant expression.
Observed Issue in GCC:
Your first attempt should have been valid but may have encountered bugs in earlier versions of GCC. If you have access to a more recent version of GCC, it is worth trying the initial code again.
The above is the detailed content of How Can I Initialize a Static Constexpr Member with a Static Function in C ?. For more information, please follow other related articles on the PHP Chinese website!