enable_if_t テンプレート引数の再定義の問題
提供されたコードでは、新しい構文を使用して std::enable_if 型制約を変換しようとしています。 (typename = std::enable_if_t...) とすると再定義エラーになります。これは、2 つのテンプレート関数:
template<typename T, typename = std::enable_if_t<std::is_same<int, T>::value>>> void g() { }
と
template<typename T, typename = std::enable_if_t<std::is_same<double, T>::value>>> void g() { }
が両方とも template
この問題に対処するには、enable_if_t 制約からデフォルト値を削除する必要があります。これにより、次のコードが生成されます。
template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>*> void g() { } template<typename T, std::enable_if_t<std::is_same<double, T>::value, int>*> void g() { }
この場合、2 番目の型引数はポインターになり、その型は最初の引数に依存します。コンパイラは、型 T を代入して 2 つのテンプレート間に競合があるかどうかを判断し、競合がないことを解決します。
以上がデフォルト値で `std::enable_if_t` を使用すると再定義エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。