テンプレートを学習して実験しているうちに、私は完全に把握できなかったものを見つけました。テンプレート引数はどのように解決/推定されますか?
class sample
{
public:
sample(int a = 0) {}
};
template <typename T1,typename T2>
void add(T1 a) // Replace T1 with T2 resolves compilation error.
{}
int main()
{
add<sample>(3);
return 0;
}
上記のコードでは、コンパイルエラー(03とC++ 0xの両方)が発生します。しかし、引数の型をT1からT2に変更すると問題ありません。 nmでは、作成されたプロトタイプはadd(sample、int)[T1 = sample、T2 = int]です。引数の型としてT1を使用し、T2を使用しないとコンパイルが失敗するのはなぜですか?