Macros that define compile time constants can probably be exported as constexpr auto variables. I am worried that there could be corner cases where it would have different semantics from the macro though.
I could imagine it generating something like export inline constexpr auto GENCPPM_SOMEMACRO = SOMEMACRO; though I can think of ways to maybe make it nicer and avoid the GENCPPM_ prefix. In that case where SOMEMACRO defines a compile time constant, it is a rvalue whilst GENCPPM_SOMEMACRO is a const lvalue. I think another way would be to make it export a consteval function which returns the macro's value, which although it would be weird (you'd do like GENCPPM_SOMEMACRO() instead of GENCPPM_SOMEMACRO), would act more similarly to the macro since the result of GENCPPM_SOMEMACRO() would be a prvalue, the same as a macro which expands to a compile time constant. Maybe the strategy could be a switch where the user chooses which one to use. Or maybe the function one should just be preferred because it seems like it would be closer to the semantics of the original macros.
Related to #6 and #4
Macros that define compile time constants can probably be exported as
constexpr autovariables. I am worried that there could be corner cases where it would have different semantics from the macro though.I could imagine it generating something like
export inline constexpr auto GENCPPM_SOMEMACRO = SOMEMACRO;though I can think of ways to maybe make it nicer and avoid the GENCPPM_ prefix. In that case whereSOMEMACROdefines a compile time constant, it is a rvalue whilstGENCPPM_SOMEMACROis a const lvalue. I think another way would be to make it export a consteval function which returns the macro's value, which although it would be weird (you'd do likeGENCPPM_SOMEMACRO()instead ofGENCPPM_SOMEMACRO), would act more similarly to the macro since the result ofGENCPPM_SOMEMACRO()would be a prvalue, the same as a macro which expands to a compile time constant. Maybe the strategy could be a switch where the user chooses which one to use. Or maybe the function one should just be preferred because it seems like it would be closer to the semantics of the original macros.Related to #6 and #4