Usando parâmetros de modelo como parâmetros de modelo

Por que o código a seguir é inválido?

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

O gcc 4.3.4 reclama que "expressão primária esperada antes do token '>'", ou seja, que "S" não era uma expressão primária válida.

questionAnswers(2)

yourAnswerToTheQuestion