VS10 と armcc4.1 [ビルド 561] の両方で、次のコードのコンパイルをテストしました。関数 depth1() と depth2() の両方が VS でコンパイルされますが、armcc は depth1() のみをコンパイルし、depth2() に対してエラー 304 (引数リストに一致するインスタンスはありません) を返します。foo と bar が静的でない場合、armcc でも問題なくコンパイルされます。
理由を理解していただければ幸いです。
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);
}