2^N バイトの配列を静的に割り当てる構造を作成したいのですが、この構造のユーザーにこのサイズを指数として指定してほしくないのです。例:
my_stupid_array<char, 32> a1; // I want this!
my_stupid_array<char, 5> a2; // And not this...
このテンプレート パラメータが 2 のべき乗であるかどうかを確認し、これについて適切なメッセージでユーザーに警告するにはどうすればよいですか?
簡単なテンプレートでこれを確認できました。
template<int N>
struct is_power_of_two {
enum {val = (N >= 1) & !(N & (N - 1))};
};
ただし、これについてユーザーに適切なメッセージで警告することはできません。何か案は?
編集
あいまいな例を修正しました。
編集
1 は確かに 2 のべき乗です。それを修正しました!:)
編集
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>'
編集
わかりました。これは、アサートが失敗したときに受け取るはずのメッセージでした。しかし、それではユーザーにまともなメッセージを伝えることができません。:(