using System; struct S { public static implicit operator string (S s) { return "s"; } } interface I<in T> { } class C : I<string> { static T Foo<T> (T a, I<T> b) { return a; } public static int Main () { S s = new S (); I<string> i = new C (); if (Foo (s, i) != "s") return 1; return 0; } }