Como faço para verificar se um parâmetro de modelo é uma potência de dois?

Eu quero criar uma estrutura que aloca estaticamente uma matriz de2 ^ N bytes, mas não quero que os usuários dessa estrutura especifiquem esse tamanho como o expoente. Exemplo:

my_stupid_array<char, 32> a1; // I want this!
my_stupid_array<char, 5> a2; // And not this...

Como posso verificar se esse parâmetro de modelo é uma potência de doise avisar o usuário com uma mensagem legal sobre isso?

Eu consegui verificar isso com um modelo simples:

template<int N>
struct is_power_of_two {
    enum {val = (N >= 1) & !(N & (N - 1))};
};

No entanto, não posso avisar o usuário sobre isso com uma mensagem sã. Alguma ideia?

EDITAR

Corrigido o exemplo ambíguo.

EDITAR

1 é um poder de dois, de fato. Corrigido isso! :)

EDITAR

Usando o BOOST_STATIC_ASSERT, estou recebendo este erro de compilação para este código com o GCC:

template<int N>
struct is_power_of_two {
    enum {val = (N >= 1) & !(N & (N - 1))};
    BOOST_STATIC_ASSERT(val);
};

Erro

..\main.cpp:29:1: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' 

http://ideone.com/cMfEf

EDITAR

Oh, entendi. Essa foi a mensagem que eu deveria receber quando a afirmação falhar. Mas isso não dá ao usuário uma mensagem sensata. :(

questionAnswers(3)

yourAnswerToTheQuestion