Date: Wed, 3 Apr 2024 11:53:50 +0200
Consider following snippet
---- // .hpp file extern const int myconstant; // .cpp file constexpr int fun(){return 42;} constexpr int myconstant = fun(); ---- It is possible to declare a constant variable in a header file, and then have it constexpr in the translation unit. This has following advantages: * no init order fiasco * can be used in constexpr context in one translation unit * no recompilation of other translation units if value changes * does not require to put the "dependencies" for creating myconstant in the header file I found myself more than once wanting to write something like ---- // .hpp file int function(int); // .cpp file constexpr int function(int){return 42;} ---- But it is currently not valid C++ (GCC, for example, fails with "error: redeclaration 'constexpr int function(int)' differs in 'constexpr' from previous declaration") I would like to write something like that because it has the same advantages of myconstant, except for the init-order-fiasco. A possible workaround is writing ---- // .hpp file int function(int); // .cpp file namespace{ constexpr int function_imp(int){return 42;} } int function(int i){ return function_imp(i); } ---- but requires some unnecessary boilerplate code, which cannot even be automated with a macro, and it gets error prone with functions that accepts multiple parameters. Was such difference between constants and functions considered when constexpr did get introduced? Or was something similar already proposed? I could not find any relevant information. Best Federico
Received on 2024-04-03 09:53:57