https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63585
--- Comment #1 from Максим Прохоренко <maxim.prohorenko at gmail dot com> --- int f (double x) { if (x > 0 || x < 0) return 1; // ok - warn } struct value { double x; int operator== (const value &a) { if (a.x < x || a.x > x) return 0; // no warn ?? } }; int main (int argc, char **argv) { value a, b; int bb = 1.; if (bb == f (1.) || bb == 2.5) return 1; if (bb == 2.) return 2; bb = bb; return 0; return a == b; }