Chamando sobrecarga de construtor quando ambas as sobrecargas possuem a mesma assinatura

Considere a seguinte classe,

class Foo
{
    public Foo(int count)
    {
        /* .. */
    }

    public Foo(int count)
    {
        /* .. */
    }
}

O código acima é inválido e não será compilado. Agora considere o seguinte código,

class Foo<T>
{
    public Foo(int count)
    {
        /* .. */
    }

    public Foo(T t)
    {
        /* .. */
    }
}

static void Main(string[] args)
{
    Foo<int> foo = new Foo<int>(1);
}

O código acima é válido e compila bem. ChamaFoo (contagem int).

Minha pergunta é, se o primeiro é inválido, como o segundo pode ser válido? Eu sei classeFoo <T> é válido porque T e int são tipos diferentes. Mas quando é usado comoFoo <int> foo = novo Foo <int> (1), T está obtendo um tipo inteiro e ambos os construtores terão a mesma assinatura, certo? Por que o compilador não mostra erro em vez de escolher uma sobrecarga para executar?

questionAnswers(4)

yourAnswerToTheQuestion