Как проверить параметры шаблона во время компиляции, когда шаблонный класс не содержит используемых функций-членов?
У меня есть следующее шаблонное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
быть неотрицательным?