標準ライブラリのコンセプトには、 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 でやってたことが、わりとすんなり書けます。