static_assertは、コンパイル時に式が条件を満たすかテストします。
式がfalseを返すときは、コンパイルに失敗します。
static_assert(テストする式, コンパイルエラーのメッセージ)
例
static_assert(sizeof(int) < sizeof(long), "error");
has_virtual_destructorは、型に仮想デストラクタが存在するかどうかをテストします。
#include <type_traits>
static_assert(
std::tr1::has_virtual_destructor<TObject>::value,
"destructor must be virtual");
例えば、longがintより大きいサイズであることに依存するアルゴリズムの実装のように、標準では保障されていない箇所の確認などの用途がある
なるほど。
実行時ではなく、コンパイル時にテストできるのは嬉しいかもしれません。