enum class enabler{};
template<typename T>
class X {
template<typename std::enable_if<std::is_class<T>::value,enabler>::type = enabler()>
void func();
void func(int a);
void func(std::string b);
};
このクラスには、func
の3つのオーバーロードがあります。クラス/非クラス型の両方で使用可能な2番目/ 3番目のバージョンが必要であり、最初のバージョンはクラス型でのみ使用できる必要があります。上記のようにenable_if
を使用しようとすると、クラス以外の型のクラスインスタンス化によってコンパイルエラーが発生します。オーバーロードでenable_ifを使用する方法
SFINAEは、*演繹*型でのみ動作します。 –
あなたはもっと詳しく教えていただけますか? – mkmostafa
実際にsfinaeを使用する必要はありません。あなたのケースでは 'static_assert'で十分です。私の(遅い)答えの中の最小の例を見てください。 – skypjack