- new compiler versions regularly introduce new warnings, not a bad thing in general of course, but:
- even if your own code is warning-clean (which it really should be!), dependencies are usually full of warnings especially after upgrading compiler versions
- some compilers issue different warnings based on compile settings (e.g. optimization level)
- there's a threshold where picky warnings stop being all that useful. For instance hardly any C/C++ code I've encountered is -Wsign-compare clean, and some APIs are not designed with this sort of warning in mind, so you have the option of littering your code with explicit casts (which makes it less readable), or just ignore that warning and move on.
My own strategy is: enable -Werror for development and keep your own code warning free, while locally supressing warnings in dependencies. For release builds, don't use -Werror (because you can't know what compiler version your users are using).
There's also the theoretical feature that headers included with '#include <...>' don't generate warnings, but I haven't gotten this to work reliably across compilers.