¿Cómo verifico si un parámetro de plantilla es una potencia de dos?

Quiero crear una estructura que asigne estáticamente una matriz de2 ^ N bytes, pero no quiero que los usuarios de esta estructura especifiquen este tamaño como exponente. Ejemplo:

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

¿Cómo compruebo si este parámetro de plantilla es una potencia de dos?y ¿Advertir al usuario con un bonito mensaje sobre esto?

He podido comprobar esto con una plantilla simple:

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

Sin embargo, no puedo advertir al usuario sobre esto con un mensaje sano. ¿Algunas ideas?

EDITAR

Se corrigió el ejemplo ambiguo.

EDITAR

1 es un poder de dos en efecto. ¡Arreglado eso! :)

EDITAR

Al usar BOOST_STATIC_ASSERT, obtengo este error de compilación para este código con GCC:

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

Error

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

http://ideone.com/cMfEf

EDITAR

Oh ya entiendo. Ese fue el mensaje que se supone que debo recibir cuando la afirmación falla. Pero eso no le da al usuario algún mensaje sano. :(

Respuestas a la pregunta(3)

Su respuesta a la pregunta