Por qué C # no puede inferir el tipo de este caso aparentemente simple y obvio

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 _) { }
}

El compilador se queja de queTest(A) no puede entenderT serstring.

Esto me parece un caso bastante fácil, y juro que he confiado una inferencia mucho más complicada en otras funciones genéricas de utilidad y extensión que he escrito. ¿Que me estoy perdiendo aqui

Actualización 1: Esto está en el compilador C # 4.0. Descubrí el problema en VS2010 y la muestra anterior es de una reproducción de caso más simple que hice en LINQPad 4.

Actualización 2: se agregaron algunos ejemplos más a la lista de lo que funciona.