LINUX.ORG.RU

История изменений

Исправление 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);