У меня есть следующее шаблонное struct
:
template<int Degree>
struct CPowerOfTen {
enum { Value = 10 * CPowerOfTen<Degree - 1>::Value };
};
template<>
struct CPowerOfTen<0> {
enum { Value = 1 };
};
, которое будет использоваться следующим образом:
const int NumberOfDecimalDigits = 5;
const int MaxRepresentableValue = CPowerOfTen<NumberOfDecimalDigits>::Value - 1;
// now can use both constants safely - they're surely in sync
теперь, когда шаблон требует, чтобы Degree
был неотрицательным,Я хотел бы обеспечить утверждение времени компиляции для этого.
Как мне это сделать?Я попытался добавить деструктор к CPowerOfTen
:
~CPowerOfTen() {
compileTimeAssert( Degree >= 0 );
}
, но поскольку он не вызывается напрямую, Visual C ++ 9 решает не создавать его экземпляр, и поэтому оператор assert во время компиляции вообще не оценивается.
Как я могу применить проверку во время компиляции, чтобы Degree
был неотрицательным?