Как проверить, является ли параметр шаблона степенью двойки?

Я хочу создать структуру, которая статически выделяет массив2^N bytes, но я не хочу, чтобы пользователи этой структуры указывали этот размер в качестве показателя степени. Пример:

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

Как проверить, является ли этот параметр шаблона степенью двойкиand предупредить пользователя с хорошим сообщением об этом?

Я смог проверить это с помощью простого шаблона:

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

Однако я не могу предупредить пользователя об этом с помощью вменяемого сообщения. Есть идеи?

EDIT

Исправлен неоднозначный пример.

EDIT

1 - это сила двух. Исправлено! :)

EDIT

Используя BOOST_STATIC_ASSERT, я получаю эту ошибку компиляции для этого кода с GCC:

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

ошибка

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

http://ideone.com/cMfEf

EDIT

О, я понял. Это было сообщение, которое я должен был получить, когда утверждение не удалось. Но это не дает пользователю какое-то вменяемое сообщение. :(

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

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