Да, есть. Но не в этом конкретном примере. Если параметр не выводится, это может иметь значение
template<typename T> void f(typename T::type t);
Вы не можете специализировать это без <type>
, поскольку оно не может определить, что T
из списка параметров.
struct MyType { typedef int type; };
// needs <MyType>
template<> void f<MyType>(int t) { }
Конечно, в вашем случае, это орграф <:
, что означает то же самое, что и [
, вызывающее вашу проблему. Поставьте пробел, как <
::string>
, чтобы избежать проблемы.