C++におけるテンプレートの実パラメータの変換


「C++Primer 4.0」の練習問題16.23は、標準関数maxにintとdoubleタイプのパラメータを渡すことができるかどうかを試みることを要求している.以下は私の実測と小さな発見(環境:VS 2010、Win 7 32ビット)である.
試行1:
int i = 1;
double dn = 2.2;
cout << max(dn,i) << endl;

コンパイラはmaxテンプレートに一致するパラメータがないため、3行目のエラーをプロンプトします.
次のような変更を行うと、コンパイラは正常にコンパイルされます.
試行2:
int i = 1;
double dn = 2.2;
cout << max<double>(dn,i) << endl;

実行結果は2.2です.個人的には、試行2でmaxがmaxテンプレートに表示タイプパラメータを指定しているため、コンパイラはintタイプのiをdoubleタイプに暗黙的に変換し、コンパイルおよび実行に成功することができると考えています.
次に検証します.
int i = 1;
char a = 'a';
cout << max<int>(a,i) << endl;

結果は97でした.Bingo~~
 
よし...次の問題はこれについて話します.の悲しい...