Can a type be a reference type and a value type at the same time?
If not and the set of reference types and value types are mutually exclusive, why doesn't this compile:

    public static void Do<T>(T obj) where T : struct { }
    public static void Do<T>(T obj) where T : class { }

The compiler states: "Type already defines a member called 'Do' with the same parameter types.", but T and T are not the same here. One is constrained to structs, the other is constraint to classes. A call to the function should always be resolvable. Are there counter examples?

Can a type be a reference type and a value type at the same time?
===

If not and the set of reference types and value types are mutually exclusive, why doesn't this compile:

    public static void Do<T>(T obj) where T : struct { }
    public static void Do<T>(T obj) where T : class { }

The compiler states: "Type already defines a member called 'Do' with the same parameter types.", but T and T are not the same here. One is constrained to structs, the other is constraint to classes. A call to the function should always be resolvable. Are there counter examples?
