これ、単体ではつまんないんですよ。 例えば、
// 32ビットじゃなきゃダメ。 BOOST_STATIC_ASSERT(sizeof(void*) == 4);
なんて感じ。 これ、普通の assert と違って、コンパイルタイムに検出できるのです。 実行時には全く何も実行されない。 コードの中ならほぼどこにでも置ける。 まあ、そういうもの。
からくりも簡単。ドキュメントから引用。
template <bool> struct STATIC_ASSERTION_FAILURE; template <> struct STATIC_ASSERTION_FAILURE<true>{};
というような、テンプレート引数が false なら 定義されていない型を利用するのです。
まあ、次項の type_traits と組み合わせる色々面白いんです。
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。