¿Por qué Nullable <T> es nullable? ¿Por qué no se puede reproducir?

Cuando yo escribo

Nullable<Nullable<DateTime>> test = null;

Me sale un error de compilación:

The type 'System.Datetime?' must be a non-nullable value type in order to use it as a paramreter 'T' in the generic type or method 'System.Nullable<T>'

PeroNullable<T>&nbsp;es unstruct&nbsp;por lo que se supone que es no anulable.

Así que traté de crear estestruct:

public struct Foo<T> where T : struct
{
    private T value;

    public Foo(T value)
    {
        this.value = value;
    }

    public static explicit operator Foo<T>(T? value)
    {
        return new Foo<T>(value.Value);
    }

    public static implicit operator T?(Foo<T> value)
    {
        return new Nullable<T>(value.value);
    }
}

Ahora cuando escribo

        Nullable<Foo<DateTime>> test1 = null;
        Foo<Nullable<DateTime>> test2 = null;
        Foo<DateTime> test3 = null;

La primera línea está bien, pero para la segunda y tercera línea obtengo los dos siguientes errores de compilación:

The type 'System.DateTime?' must be a non-nullable value type in order to use it as a parameter 'T' in the generic type or method 'MyProject.Foo<T>'&nbsp;(segunda línea solamente)

y

Cannot convert null to 'MyProject.Foo<System.DateTime?> because it is a non-nullable value type'

        Foo<Nullable<DateTime>> test = new Foo<DateTime?>();

no funciona ni evento siNullable<DateTime>&nbsp;es unstruct.

Conceptualmente, puedo entender por quéNullable<T>&nbsp;es anulable, evita tener cosas comoDateTime??????????&nbsp;sin embargo todavía puedo tenerList<List<List<List<List<DateTime>>>>>...

Entonces, ¿por qué esta limitación y por qué no puedo reproducir este comportamiento enFoo<T>? ¿Es esta limitación impuesta por el compilador o es intrínseca enNullable<T>&nbsp;¿código?

Yo leoesta pregunta&nbsp;pero solo dice que no es posible ninguna de las respuestas dice fundamentalmente por qué no es posible.