Исправление nikitos, (текущая версия) :
template <int Val, int Arg>
struct strange_compile_time_math
{
enum res_val { r_plus = Val + Arg, r_mod = Val % Arg};
};
// используем
if( 8 == strange_compile_time_math<5,3>::r_plus)
exit(1);
Можно сделать обобщенным если намешать свойства типов, и явно указать тип значений enum, с 11-го стандарта так можно.
Исходная версия nikitos, :
template <int Val, int Arg>
struct strange_compile_time_math
{
enum res_val { r_plus = Val + Arg, r_mod = Val % Arg};
};
// используем
if( 8 == strange_compile_time_math<5,3>::r_plus)
exit(1);