Old Magic, New Magic

Before constexpr functions existed, how was compile-time computation typically achieved in C++?

A

It wasn't possible: all computation happened at runtime before constexpr

B

Using preprocessor macros with arithmetic operations

C

Using recursive template instantiations with specializations as base cases to compute values as template parameters

D

Using inline functions with optimization flags to force compile-time evaluation