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

C++0x - コンセプトの続き


以下のようにlate_checkブロックを書くことにより
コンセプトでのチェックはしないようにできる(現行のテンプレートのコード生成時のチェック)

concept Semigroup<typename T> {
    T::T(const T&);
    T operator+(T, T);
}

concept_map Semigroup<int> {
    int operator+(int lhs, int rhs) { return x + y };
}

template <Semigroup T>
T add(T lhs, T rhs)
{
    x + y; // Semigroup<T>::operator+でのコンセプトチェック

    late_check {
        x + y; // class Tのoperator+でのチェック
    }
}

C++0x言語拡張まとめ