Что делает ValueTuple ковариантным?

Это правильно компилируется в C # 7.3 (Framework 4.8): (string, string) s = ("a", "b"); (object, string) o = s; Я знаю, что это синтаксический сахар для следующего, который также правильно компилируется: ValueTuple<string, string> s = new ValueTuple<string, string>("a", "b");...