C++0x コンセプト - DerivedFrom

標準ライブラリのコンセプトには、 Type Traits 相当のものがけっこう入ります。
たとえば、継承関係を判定する DerivedFrom コンセプト

#include <iostream>

struct base {};
struct derived : public base {};

template <class T>
requires std::DerivedFrom<T, base>
void foo(T& t)
{
}

int main()
{
    derived d;
    foo(d); // OK

    int n = 3;
    foo(n); // エラー!intはbaseを継承していない
}


is_base_of + static_assert でやってたことが、わりとすんなり書けます。