¿Por qué un <T> anulable no es un parámetro de atributo personalizado válido cuando T es?

Si tengo una enumeración como esta

public enum Hungry
{
    Somewhat,
    Very,
    CouldEatMySocks
}

y un atributo personalizado como este

public class HungerAttribute : Attribute
{
    public Hungry HungerLevel { get; set; }
    public Hungry? NullableHungerLevel { get; set; }
}

puedo hacer esto

[Hunger(HungerLevel = Hungry.CouldEatMySocks)]
public class Thing1

pero no puedo hacer esto

[Hunger(NullableHungerLevel = Hungry.CouldEatMySocks)]
public class Thing2

Genera un error que dice "'NullableHungerLevel' no es un argumento de atributo con nombre válido porque no es un tipo de parámetro de atributo válido".

¿Por qué no está permitido? Entiendo que, básicamente, simplemente no está en la lista de tipos aceptados. Los tipos válidos parecen ser primitivos, enumeraciones, cadenas, tipos y matrices unidimensionales de los tipos anteriores.

¿Es solo una regla antigua que no se actualizó cuando apareció Nullable?

Respuestas a la pregunta(4)

Su respuesta a la pregunta