問題タブ [template-argument-deduction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
695 参照

c++ - コンパイラが関数の引数からテンプレートの値を推測できないのはなぜですか?

以下はコンパイルされません。

私が得るエラーは次のとおりです。

  • 'E m' の宣言: void foo(E m) {} : シャドウ テンプレート パラメータ 'E m'
  • エラー: 'foo(E)' の呼び出しに一致する関数がありません: foo(A);
  • 候補は: template void foo(E) : void foo(E m) {}
  • テンプレート引数の推測/置換に失敗しました: テンプレート パラメーター 'm' を推測できませんでした: foo(A);

ここで何が間違っているのか正確にはわかりません。コンパイラが関数の引数からテンプレート パラメーターを推測できないのはなぜですか?

これを機能させるにはどうすればよいですか?

0 投票する
2 に答える
132 参照

c++ - テンプレートの引数推定が機能しないのはなぜですか?

次のおもちゃのプログラムは、音楽の種類を対応する色に変換します。正常にコンパイルおよび実行されます。COUNTRY予想どおり、 の変換は失敗し、conversion()関数はデフォルトの を返しますWHITE。ただし、テンプレート引数を削除すると<MUSIC, COLOR>、テンプレート引数推定は使用する型を認識しません。控除を機能させるにはどうすればよいですか?

0 投票する
1 に答える
992 参照

c++ - SFINAE は、派生クラスから基底クラスへのキャスト演算子のみを有効にします

クラステンプレートがありCFoo<T>ます。の他のインスタンス化への暗黙的なキャストを許可したいのですがCFoo、テンプレート引数が の基本クラスである場合に限りTます。

SFINAE を使用しようとしましたが、試したコンパイラ (VC 2012 または gcc) ではどちらも機能しませんでした。

SFINAE でコメントアウトされた試みのいずれもここで機能しないのはなぜですか? aどちらの場合も、演算子が呼び出されなかったかのように、の無効な初期化のエラーが発生します。

0 投票する
4 に答える
505 参照

c++ - エイリアス テンプレートでのテンプレート引数推定 - メンバ関数ポインタの型定義

質問に答えながら、メンバー関数のシグネチャの型定義にテンプレート エイリアスを利用することを提案しました。つまり、メンバー関数を型定義するだけでなく、メソッドを含むターゲット クラスを除外できます。

これは質問が尋ねたことをカバーしているように見えますが、任意の関数引数に対して一般化しようとしました:

引数推定の問題で失敗します (基本的に、空の引数リストを想定しています)。ここにデモがあります:

どうしてこれなの?それを機能させる方法はありますか?

0 投票する
2 に答える
120 参照

c++11 - init-list-as-function-argument およびテンプレートのオーバーロード解決に関するセマンティック エラー

Eclipse CDT (Eclipse v4.5.0、ビルド ID 20150621-1200; CDT v8.7.0.201506070905) をその継続的なビルド プロセスで C++11 を使用するように構成しましたが、特定の式は適切にコンパイルされていてもセマンティック エラーを引き起こしています。 g++ 4.9.2 および clang++ 3.8.0 を使用。つまり、関数の引数として指定された波括弧付きの init リストは、引数の対応するstd::initializer_listコンストラクターと一致せず、LLVM のcast関数の正しいバージョンも、指定された引数と一致しません。Eclipse CDT は、検出する最新の外部 GCC ツールチェーンに委任するのではなく、そのような C++11 機能をサポートしない古い内部パーサーを使用していますか?

エラー #1

無効な引数 '
候補は次のとおりです:
llvm::FunctionType * get(llvm::Type *, llvm::ArrayRef, bool)
llvm::FunctionType * get(llvm::Type *, bool)

エラー #2

無効な引数 '
候補は次のとおりです:
llvm::cast_retty<#0,#1 *>::ret_type cast(#1 *) std::enable_if::ret_type>::type cast(const #1 &)
llvm::cast_retty< #0,#1>::ret_type cast(#1 &)
'

0 投票する
1 に答える
72 参照

c++ - テンプレートの置換中に暗黙の変換が発生する可能性がありますか?

私は常に、テンプレート化された関数では暗黙的な変換が発生しない可能性があり、引数の型がテンプレート化されたパラメーターの型と正確に一致する必要があると考えていました。そうしないと、テンプレートの引数推定が失敗します。

うーん、どうやら私が間違っていたようです。

次のスニペットを検討してください。

なぜ2番目のstd::cout << (5 < j)作品がうまくいくのか分かりません。ここで暗黙の変換が発生したに違いありません。これは禁止されていると思いました。そして、前者が機能する場合、なぜ機能しないのかはさらにわかりませんstd::cout << (i < 6)!

編集: のコンパイラ エラーstd::cout << (i < 6):

0 投票する
1 に答える
135 参照

c++ - テンプレート引数の推定が失敗した場合、decltype は成功しますか?

bbb の行がコメント アウトされていないが、その前の行がコメント アウトされていない場合に、次のコードがコンパイルされて期待どおりに動作する理由を知りたいのですが、aaa でマークされた行がコメント アウトされておらず、bbb の行がコメント アウトされていない場合は失敗します。は: