Jak sprawdzić, czy parametr szablonu jest potęgą dwóch?

Chcę utworzyć strukturę, która przydziela statycznie tablicę2 ^ N bajtów, ale nie chcę, aby użytkownicy tej struktury określali ten rozmiar jako wykładnik. Przykład:

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

Jak sprawdzić, czy ten parametr szablonu jest potęgą dwóchi ostrzec użytkownika o miłej wiadomości na ten temat?

Mogłem to sprawdzić za pomocą prostego szablonu:

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

Nie jestem jednak w stanie ostrzec użytkownika o tym rozsądnym komunikatem. Jakieś pomysły?

EDYTOWAĆ

Naprawiono niejednoznaczny przykład.

EDYTOWAĆ

1 to rzeczywiście moc dwóch. Naprawiono to! :)

EDYTOWAĆ

Używając BOOST_STATIC_ASSERT, otrzymuję ten błąd kompilacji dla tego kodu z GCC:

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

Błąd

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

http://ideone.com/cMfEf

EDYTOWAĆ

Oh, już rozumiem. To było przesłanie, które mam otrzymać, gdy twierdzenie się nie powiedzie. Ale to nie daje użytkownikowi rozsądnej wiadomości. :(

questionAnswers(3)

yourAnswerToTheQuestion