using System;
public struct S{
public static S operator +(bool? b, S y)
{
return new S();
}
public static S operator +(S x)
{
return new S();
}
}
public class Test
{
public static void Main()
{
// the trick is to use the fact that the operator +
// is both unary and binary.
var o = 1 is bool? +new S() is int ? null : default(bool?);
var p = 1 is bool? +new S() is int ? : default(bool?);
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIHN0cnVjdCBTewogICAgcHVibGljIHN0YXRpYyBTICBvcGVyYXRvciArKGJvb2w/IGIsIFMgeSkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFMoKTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBTICBvcGVyYXRvciArKFMgeCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFMoKTsKICAgIH0KfQoKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQkvLyB0aGUgdHJpY2sgaXMgdG8gdXNlIHRoZSBmYWN0IHRoYXQgdGhlIG9wZXJhdG9yICsKCQkvLyBpcyBib3RoIHVuYXJ5IGFuZCBiaW5hcnkuCgkJdmFyIG8gPSAxIGlzIGJvb2w/ICArbmV3IFMoKSBpcyBpbnQgPyBudWxsIDogZGVmYXVsdChib29sPyk7CgkJdmFyIHAgPSAxIGlzIGJvb2w/ICArbmV3IFMoKSBpcyBpbnQgPyA6IGRlZmF1bHQoYm9vbD8pOwoJfQp9