Suppose you have

class A {};

class B {}

template<class T> void SomeFcn( T t ) {
};

A a;

B b;

These are both legal:

SomeFcn( a );

SomeFcn<B>( b );

The question is: When (if ever) is the second syntax required?

// Microsoft MFC specific version of question

template<class T> void SomeArrayFcn( CArray< T, T>& array ) {
};

CArray<A,A> arraya;

CArray<B,B> arrayb;

These are both legal:

SomeArrayFcn( arraya);

SomeArrayFcn<B>( arrayb);

The question is: When (if ever) is the second syntax required?