Paul Eggert <eggert@cs.ucla.edu> writes:
I asked Gemini, and it replied that these hacks probably won't work. It also said that the bug with MSVC's enum warnings (C5287) being generated for benign expressions like +X < +Y has been reported to Microsoft. A Google search suggests that a fix is on the way, giving this URL:
https://developercommunity.visualstudio.com/t/False-positive-C5287:-operands...
... a URL that I don't have access to read, unfortunately.
Hmm ... I don't have any special access either, but I was able to read https://developercommunity.visualstudio.com/t/warning-C5287:-operands-are-di... which says specifically that this gave a warning as of MSVC 19.44.34918.1: ee = (int)((int)e1_1 | (int)e2_1) and that Microsoft acknowledged that as a bug and fixed it in some later release (doesn't say which unfortunately). This isn't exactly the situation zic.c presents, but it seems likely that it'd apply. I don't see anything indicating that they made it be silent without a cast; maybe they did but there's no evidence of that here. I'm not really following your aversion to a cast. Surely none of these constants will ever come close to exceeding INT_MAX. And I don't buy that applying "+" is less of a hack. Anyway, on the other point: the unsigned warning isn't only on old MSVC versions. I see it also on the latest that we have in the Postgres buildfarm, 19.50.35726. I only meant to comment that it appears on a wider range of MSVC versions than the inconsistent-enum-types one. regards, tom lane