Por que o C # não pode inferir o tipo desse caso aparentemente simples e óbvio

Dado este código:

class C
{
    C()
    {
        Test<string>(A); // fine
        Test((string a) => {}); // fine
        Test((Action<string>)A); // fine

        Test(A); // type arguments cannot be inferred from usage!
    }

    static void Test<T>(Action<T> a) { }

    void A(string _) { }
}

O compilador reclama queTest(A) não consigo descobrirT ser estarstring.

Parece-me um caso bastante fácil, e juro que confiei em inferência muito mais complicada em outras funções genéricas de utilidade e extensão que escrevi. O que estou perdendo aqui

Atualização 1: Isso está no compilador C # 4.0. Descobri o problema no VS2010 e o exemplo acima é de uma reprodução de caso mais simples que fiz no LINQPad 4.

Atualização 2: Adicionamos mais alguns exemplos à lista do que funcion