Как проверить параметры шаблона во время компиляции, когда шаблонный класс не содержит используемых функций-членов?

У меня есть следующее шаблонное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 быть неотрицательным?

Ответы на вопрос(5)

Ваш ответ на вопрос