2 つのポリシー テンプレート パラメーターを受け取るクラスがあるとします。
template<typename PolicyA, typename PolicyB>
class widget;
次の使用可能なポリシー クラス A1、A2、A3、B1、B2、B3。1 と 2 は相互に互換性があるが、A3 は B3 とのみ互換性があることをどのように伝えることができますか? つまり、次のインスタンス化のみが許可されます。
widget<A1, B1> w11; // All valid.
widget<A1, B2> w12;
widget<A2, B1> w21;
widget<A2, B2> w22;
widget<A3, B3> w33;
// No other combination allowed.
特殊化内で std::enable_if を使用しようとして失敗すると、コンパイル エラーが発生しました。
template<typename A, typename B>
class<A3, enable_if<is_same<B, B3>::value, B3>::type>
{};