7
4

2 に答える 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 に答える