今、関数テンプレートを学習しています。関数テンプレートのインスタンス化に関する少しのルールを調べたいと思っていました。だから私は、次のコードを書いている:C++ - 関数テンプレートのインスタンス化に関するルール
#include <iostream>
template <typename>
int check(int x) {
return x * 2;
}
int main() {
std::cout << check<double>(10) << std::endl; // #1
std::cout << check<>(10) << std::endl; // #2
std::cout << check(10) << std::endl; // #3
return 0;
}
ライン#1、#2、#3は、それぞれが、私はどちらか一方のみのを残して、残りをコメントしてみてください、すべて一緒にコンパイルされていません。 #1を有効にすると、コンパイルエラーがなく、正しい回答 "20"が表示されます。私が理解しているように、"チェック<"ダブル ">"は、"int check(int)"関数が実際に作成された(テンプレートパラメータの型は影響を与えません)。 #3が有効な場合、私はコンパイルエラーを持っています "エラー:を呼び出しようとしているので、" check(int) ""の呼び出しで一致する関数がありません "存在しない関数です。私の質問は#2のケースに関する:この場合、私は同じ"エラー: 'check(int)'"の呼び出しのための一致する関数がありません。 "check <>(10)"トリガーテンプレートのインスタンシエーションメカニズムも呼び出さないでください。
"チェック<>(10)"テンプレートのインスタンス化メカニズムもトリガーしないでください?_ "あなたの質問に対する答えは:どのような引数ですか? – curiousguy