class ObjectComparisonTest
{
    UnknownType unknownValue;

    void test()
    {
        bool result;

        // GOOD: type information missing
        result = unknownF() == unknownF();
        result = this == unknownValue;
        result = someValue == unknownValue;
        result = (object)unknownF() == 0;
        result = (object)unknownValue = someValue;

        // BAD: Explicit cast
        result = (object)unknownValue == (object)someValue;

        // BAD: Type information known
        result = this == (object)this;
    }
}
