https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94389
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Compared to [[nodiscard]], warn_unused_result attempts to force users harder not to ignore the return value. So, it doesn't allow just (void) cast to shut up the warning, and this foo () ? 0 : 0 or 0 * foo () is similar obfuscation to ignore the result when whomever that added the warn_unused_result attribute wanted users not to do that. So, use [[nodiscard]] instead of you want less aggressive checking, or change your code, like O_TEXT != 0 ? text_mode () ? O_TEXT : 0 : 0 where you wouldn't even call the function if you want to ignore the return value.