Usar parámetros de plantilla como parámetros de plantilla

¿Por qué el siguiente código no es válido?

template <typename S, typename T>
struct B{
    void f(T t, S s) {t.f<S>(s); }
};

gcc 4.3.4 se queja de que "esperaba una expresión primaria antes de '>' token", es decir, que "S" no era una expresión primaria válida.