問題タブ [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.
c++ - コンパイラが関数の引数からテンプレートの値を推測できないのはなぜですか?
以下はコンパイルされません。
私が得るエラーは次のとおりです。
- 'E m' の宣言: void foo(E m) {} : シャドウ テンプレート パラメータ 'E m'
- エラー: 'foo(E)' の呼び出しに一致する関数がありません: foo(A);
- 候補は: template void foo(E) : void foo(E m) {}
- テンプレート引数の推測/置換に失敗しました: テンプレート パラメーター 'm' を推測できませんでした: foo(A);
ここで何が間違っているのか正確にはわかりません。コンパイラが関数の引数からテンプレート パラメーターを推測できないのはなぜですか?
これを機能させるにはどうすればよいですか?
c++ - テンプレートの引数推定が機能しないのはなぜですか?
次のおもちゃのプログラムは、音楽の種類を対応する色に変換します。正常にコンパイルおよび実行されます。COUNTRY
予想どおり、 の変換は失敗し、conversion()
関数はデフォルトの を返しますWHITE
。ただし、テンプレート引数を削除すると<MUSIC, COLOR>
、テンプレート引数推定は使用する型を認識しません。控除を機能させるにはどうすればよいですか?
c++ - SFINAE は、派生クラスから基底クラスへのキャスト演算子のみを有効にします
クラステンプレートがありCFoo<T>
ます。の他のインスタンス化への暗黙的なキャストを許可したいのですがCFoo
、テンプレート引数が の基本クラスである場合に限りT
ます。
SFINAE を使用しようとしましたが、試したコンパイラ (VC 2012 または gcc) ではどちらも機能しませんでした。
SFINAE でコメントアウトされた試みのいずれもここで機能しないのはなぜですか? a
どちらの場合も、演算子が呼び出されなかったかのように、の無効な初期化のエラーが発生します。
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 &)
'
c++ - テンプレートの置換中に暗黙の変換が発生する可能性がありますか?
私は常に、テンプレート化された関数では暗黙的な変換が発生しない可能性があり、引数の型がテンプレート化されたパラメーターの型と正確に一致する必要があると考えていました。そうしないと、テンプレートの引数推定が失敗します。
うーん、どうやら私が間違っていたようです。
次のスニペットを検討してください。
なぜ2番目のstd::cout << (5 < j)
作品がうまくいくのか分かりません。ここで暗黙の変換が発生したに違いありません。これは禁止されていると思いました。そして、前者が機能する場合、なぜ機能しないのかはさらにわかりませんstd::cout << (i < 6)
!
編集: のコンパイラ エラーstd::cout << (i < 6)
:
c++ - テンプレート引数の推定が失敗した場合、decltype は成功しますか?
bbb の行がコメント アウトされていないが、その前の行がコメント アウトされていない場合に、次のコードがコンパイルされて期待どおりに動作する理由を知りたいのですが、aaa でマークされた行がコメント アウトされておらず、bbb の行がコメント アウトされていない場合は失敗します。は: