This split off from https://github.com/rust-lang/rfcs/pull/886#issuecomment-279126185 .
The gist is that, instead of marking types or specific functions with #[must_use], maybe we should do the opposite and mark specific functions with #[can_ignore], such that no return values can be ignored by default with “;”.
Many people mentioned that this was considered in the past but was decided against because of methods like Vec::push possibly returning the item pushed. I’m interested to know how pervasive this kind of functions are, because it seems to me that they should be in the minority, and we could simply annotate them with #[can_ignore] to say that “yes, it’s safe to ignore the return values of this method”.
I realize that this is a half-sailed ship, and introducing this as even a warning could be considered too backwards-incompatible. But still it might be interesting to see whether it’s a feasible idea in a vacuum, and even whether it can possibly be introduced as a very soft warning first.