It's fine compiled code.
namespace Bug
{
public class BaseP
{
public static implicit operator int(BaseP p) { return 0; }
public static int operator +(BaseP p, BaseP p1) { return 0; }
public void F(){}
}
public class BaseP1: BaseP
{
public static implicit operator bool(BaseP1 p) { return true; }
public static bool operator +(BaseP1 p, string p1) { return true; }
}
public class Test<T, U> where T : BaseP, U
where U: BaseP1
{
public void G(BaseP t) { }
public void G1(int t) { }
public void F()
{
T t = default(T);
t.F();
int x = t;
bool y = t;
int result = t + t;
bool result1 = t + "";
}
}
}