Por que o TimeSpan e o Guid Structs podem ser comparados a null?

Eu notei que algumas estruturas .NET podem ser comparadas a null. Por exemplo:

  TimeSpan y = new TimeSpan();
        if (y == null)
            return;

irá compilar muito bem (o mesmo com a estrutura Guid).
Agora eu sei que stucts são tipo de valor e que o código acima não deve ser compilado, a menos que haja uma sobrecarga de operador == que use um objeto. Mas, tanto quanto eu poderia dizer, não há.
Eu olhei para a classe com Reflector, e também nos documentos no MSDN.
Os dois implementam as seguintes interfaces:

IComparable, IComparable<T>, IEquatable<T>

mas, tentando implment as mesmas interfaces não parece ajudar:

struct XX : IComparable, IComparable<XX>, IEquatable<XX> {
    public int CompareTo(Object obj) {
        return 0;
    }
    public int CompareTo (XX other){
        return 0;
    }
    public bool Equals (XX other){
        return false;
    }
    public override bool Equals(object value){
        return false;
    }
    public static int Compare(XX t1, XX t2){
        return 0;
    }
}

Estou usando: .NET 2.0 Visual Studio 2005.

Alguém tem alguma idéia de qual é a razão disso? Eu estou apenas tentando entender melhor. Isso não é um problema, pois sei que não devo comparar as structs para null de qualquer maneira.

questionAnswers(5)

yourAnswerToTheQuestion