Q:

Variance from T to object with generic constraints object vs class

Was trying to figure out how I could cast from Converter<string, T> to Converter<string, object> when I had the constraint where T : object.  Solved it by changing the constraint to where T : class, but I'm not entirely sure why this worked. 
This does not compile:
public void Foo<T>(Converter<string, T> x) where T : object
{
    Converter<string, object> y = x;
}

Error: Cannot implicitly convert type 'System. Converter<string,T>' to 'System. Converter<string,object>'

Yet the following does, why is this? 
public void Foo<T>(Converter<string, T> x) where T : class
{
    Converter<string, object> y = x;
}

A:

There is no such generic constraint as : object.  The first example has two errors:

Error  1   Constraint cannot be special class 'object'

and then:

Error  2   Cannot implicitly convert type 'System. Converter' to 'System. Converter'

so what is simply saying that because of no valid constraint, cast from not constraint System. Converter<string,T> cannot be done to Converter<string, object>. 
The second example has a valid contraint.  T is reference type and can be casted to object as it is the root of the type hierarchy.