VS10とarmcc4.1 [Build 561]の両方で次のコードのコンパイルをテストしました。 depth1()とdepth2()の両方の関数がVS上でコンパイルされますが、arm2はdepth1()をコンパイルし、depth2()に対してError 304(引数リストに一致するインスタンスはありません) fooとbarが非静的である場合、armccも同様にコンパイルされます。C++静的テンプレート関数によりarmccコンパイルエラーが発生する(304)
私はその理由を理解しています。
template <class T>
static T foo(T arg)
{
return arg*5;
}
template <class T>
static T bar(T arg)
{
return foo<T>(arg);
}
void depth2()
{
int i = 12;
i = bar<int>(i);
}
void depth1()
{
int i = 12;
i = foo<int>(i);
}
はコンパイラのバグのように見えます。 arm-eabi-gccもうまく動作します。たぶんfooと関係するものは、バーをコンパイルしようとする前に存在しません –
Andres
ありがとう@Andres。エラーメッセージ。から、これが当てはまると思われます。しかし、なぜ 'bar'がコンパイルするのか' foo'はコンパイルされないのかは不明です。おそらく、必要なテンプレートの深さと関係しているでしょう。 – levengli
最初にdepth1()、次にdepth2()を定義するか、fooを明示的にインスタンス化してみてください。はい、コンパイラのバグです。ここでは回避策を提供しています。 –