Вы можете использовать любую другую функцию, кроме конструктора, потому что тогда вы можете изменить имя функции, включая аргументы шаблона.
Foo foo;
foo.Method<T>();
При использовании конструктора имя конструктора никогда не появляется в вашем выражениипоэтому нет места для явного указания параметра шаблона.Вы должны вывести его из аргумента.
Foo<T> foo; // no good, assumes the type Foo is a template, not its constructor
Foo* pfoo = new Foo<T>(); // same problem
Foo foo((T*)0); // ok, deduced
Foo* pfoo = new Foo((T*)0); // same