<div dir="ltr">Hi,<div><br></div><div>clang has a useful warning -Wunused-value that warns on things such as `4;` (this probably meant to say `return 4;`).</div><div><br></div><div>winnt.h has a macro UNREFERENCED_PARAMETER(x) that's used to mark unused function parameters. It's somewhat commonly used on Windows, for example the default project generated by MSVC uses it a few times. The macro is defined as `#define UNREFERENCED_PARAMETER(x) (x)`, which means if you use it like it's intended:</div><div><br></div><div>  void f(int x) {</div><div>    UNREFERENCED_PARAMETER(x);</div><div>  }</div><div><br></div><div>then clang will emit a -Wunused-value warning for it. How do we want to fix this? Ideas:</div><div><br></div><div>1. Don't. Tell people to not use UNREFERENCED_PARAMETER().</div><div>2. Have a winnt.h wrapper in lib/Headers that undefines this macro, include_next's regular winnt.h, undefines it again, and then defines it to something that doesn't trigger -Wunused-value (say, `(void)p`, or `do { (void) P; } while (0)` or similar).</div><div>3. Change clang's Wunused-value to check if the unused value is expanded from a macro that was defined in a system header that's spelled UNREFERENCED_PARAMETER.</div><div><br></div><div>2 sounds like it has the highest chance of unintended side effects. 3 is a bit hacky, but seems nicest from a user's perspective and isn't worse than other things we do really.</div><div><br></div><div>Other ideas? Opinions?</div><div><br></div><div>Thanks,</div><div>Nico</div></div>