Método de sobrecarga basado en restricciones genéricas?

¿Puedo tener métodos sobrecargados que difieran solo por tipo genérico?restricciones?

Esto no se compila:

    void Foo<T>(T bar) where T : class
    {

    }

    void Foo<T>(T bar) where T : struct
    {

    }

Dado que estos son métodos "abiertos", el método real debe cerrarse / construirse / definirse completamente cuando se haga referencia en otro lugar en el código con un tipo concretoT, y entonces estaría claro a qué sobrecarga llamar.

La solución obvia no es sobrecargarlos, pero me pregunto por qué esto no funciona en C #.

Pregunta adicional: Si esto es solo una restricción del compilador de C #, ¿permite la IL tal sobrecarga?

Respuestas a la pregunta(3)

Su respuesta a la pregunta