Yes there is. But not in this specific example. If the parameter is not displayed, it may have a value
template<typename T> void f(typename T::type t);
You cannot specialize in this without <type> , because it cannot deduce that T from the parameter list.
struct MyType { typedef int type; };
Of course, in your case it is a digraph <: which means the same as [ , causing your problem. Put a space like < ::string> to avoid the problem.
Johannes Schaub - litb
source share