This would work just as well, or using a sentinel value for altop, etc

```
    TOK altop;
    switch (op)
    {
        // Refer rel_integral[] table
        case TOKunord:  altop = TOKerror;       break;
        case TOKlg:     altop = TOKnotequal;    break;
        case TOKleg:    altop = TOKerror;       break;
        case TOKule:    altop = TOKle;          break;
        case TOKul:     altop = TOKlt;          break;
        case TOKuge:    altop = TOKge;          break;
        case TOKug:     altop = TOKgt;          break;
        case TOKue:     altop = TOKequal;       break;
        default:
            return e;
    }
    if (altop == TOKerror &&
        (t1->ty == Tarray || t1->ty == Tsarray ||
         t2->ty == Tarray || t2->ty == Tsarray))
    {
        error("'%s' is not defined for array comparisons", Token::toChars(op));
        return new ErrorExp();
    }
    if (!t1->isfloating())
    {
        if (altop != TOKerror)
            warning("use '%s' for non-floating comparisons rather than floating point operator '%s'",
                Token::toChars(altop), Token::toChars(op));
        else
        {
            const char *s = op == TOKunord ? "false" : "true";
            warning("floating point operator '%s' always returns %s for non-floating comparisons",
                Token::toChars(op), s);
        }
    }
    else
    {
        warning("use std.math.isNaN to deal with NaN operands rather than floating point operator '%s'",
            Token::toChars(op));
    }
```