template<class T>
struct A
{
 T a,b;
};

struct B : A<int>
{
 //関数だけ
};

template<class T>
void func(A<T> *a)
{
}

void test(void)
{
 B m[3],*n;
 func(m); // NG
 func(n); // OK
}

'B [3]' から 'A<T> *' に変換できません。
と言われます。なぜm[3]を*mと解釈してくれないんですかねぇ?