When the compiler deals with a template function, it constructs a regular function/class with the template parameters expanded. The following code will make the compiler generate regular functions, as it utilizes templates:
auto valuei = int{42}; auto valuei_cubed = pow_n(valuei, 3); auto valuef = float{42.42f}; auto valuef_squared = pow_n(valuef, 2); auto valuef_const_squared = const_pow_n<2, float>(valuef); auto valuef_const_cubed = const_pow_n<3, float>(valuef);
Thus, when compiled, as distinguished from regular functions, the compiler will generate new functions for every template parameter. This means that it is the equivalent of manually creating four different functions looking something ...