2 に答える
6
その理由は、テンプレートの推定中に暗黙の型変換を取得しないためです。その時点に到達することはありません。
検討:
template <typename T>
struct foo {};
template <typename U>
void bar(foo<U>)
{}
foo<int> f;
bar(f);
そのbarの呼び出しに対して、コンパイラはそれU
がであると推測しint
、関数をインスタンス化できます。ただし、次のことを考慮してください。
template <typename U>
void bar(foo<const U>)
{} // note ^^^^
foo<int> f;
bar(f);
タイプがパラメーターのタイプと一致U
するようにコンパイラーが推測できるものはありません。foo
エルゴ、テンプレートのインスタンス化は失敗します。変換が行われる可能性はありません。
于 2010-04-19T17:56:29.060 に答える
1
template <typename U>
void tf(pointer<const float>);
^ The compiler won't match a function call to this function unless you explicitly specify a parameter type at the function call, since you don't use the typename U
as a function argument. I suspect you want to do something like:
template <typename U>
void tf(pointer<U>);
于 2010-04-19T17:42:53.283 に答える