Como validar parâmetros de modelo em tempo de compilação, quando uma classe de modelo não contém funções-membro utilizáveis?

Eu tenho um seguinte modelostruct:

template<int Degree>
struct CPowerOfTen {
enum { Value = 10 * CPowerOfTen<Degree - 1>::Value };
};

template<>
struct CPowerOfTen<0> {
    enum { Value = 1 };
};

que deve ser usado assim:

const int NumberOfDecimalDigits = 5;
const int MaxRepresentableValue = CPowerOfTen<NumberOfDecimalDigits>::Value - 1;
// now can use both constants safely - they're surely in sync

agora esse modelo requerDegree para não ser negativo. Eu gostaria de impor uma declaração em tempo de compilação para isso.

Como faço isso? Eu tentei adicionar um destruidor paraCPowerOfTen:

~CPowerOfTen() {
    compileTimeAssert( Degree >= 0 );
 }

mas como não é chamado diretamente, o Visual C ++ 9 decide não instancia-lo e, portanto, a declaração de declaração em tempo de compilação não é avaliada.

Como impor uma verificação em tempo de compilação paraDegree sendo não negativo?

questionAnswers(5)

yourAnswerToTheQuestion