を生成し、私は2つのテストクラスを作ってきました。 Tがデフォルトで構成可能でない場合、2番目のものは "失敗"します。タイプSFINAEはコンパイルが、エラー
template<typename T>
T* CreateInstanceTest(char*[!std::is_default_constructible<T>::value] = 0) { return nullptr; }
template<typename T>
T* CreateInstanceTest(char*[std::is_default_constructible<T>::value] = 0) { return new T(); }
それから私はこれを行う:
「オーバーロードされた関数の複数のインスタンスが 『CreateInstanceTestは、』引数リストと一致した」エラーが発生しClass1* obj1 = CreateInstanceTest<Class1>();
Class2* obj2 = CreateInstanceTest<Class2>();
。
ただし、正常にコンパイルされ、期待どおりに動作します。 obj1がnullになり、obj2が適切に作成されます。
どうしてですか?それを回避する方法はありますか?
エラーは発生しますが、コンパイルは問題ありませんか? – Zereges
はい。テキストが赤くなり、「エラーリスト」にエラーが表示されますが、正常に構築され、プログラムを実行できます。期待どおりに動作します。 – MyNiceDisplayName
は 'std :: enable_if_t'を使います。 – Jarod42