テンプレート引数の「enable_if_t」で再定義エラーが発生するのはなぜですか?

Linda Hamilton
リリース: 2024-11-19 03:45:03
オリジナル
851 人が閲覧しました

Why Am I Getting a Redefinition Error with `enable_if_t` in Template Arguments?

テンプレート引数の enable_if_t の再定義エラー

C では、コードを新しい構文。次のコードは問題を示しています:

template<typename T,
         typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr>
void f() { }

template<typename T,
         typename = std::enable_if_t<std::is_same<int, T>::value>>
void g() { }
ログイン後にコピー

GCC (5.2) でコンパイルするとエラーが発生します:

"error: redefining of 'template void g()' 「

の原因」エラー

このエラーは、2 つのテンプレート関数 f と g のテンプレート型 void() が同じであるために発生します。 2 番目のテンプレート引数のデフォルト値は異なりますが、型は同じです。

解決策

この問題を解決するには、std:: を使用するように構文を更新します。異なる 2 番目の引数の型を指定したenable_if_t。例:

template<typename T,
         std::enable_if_t<std::is_same<int, T>::value, int>* = nullptr>
void f() { }

template<typename T,
         std::enable_if_t<std::is_same<double, T>::value, double>* = nullptr>
void g() { }
ログイン後にコピー

この変更により、2 つのテンプレート関数が異なるテンプレート タイプを持つようになり、再定義エラーが排除されます。

以上がテンプレート引数の「enable_if_t」で再定義エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート