I think the paper draws the wrong conclusions. There are far too many reserved identifiers. In what world should identifiers like token, stride, stream, ERROR_SUCCESS, or member be reserved? Rather than add additional warnings, instead the C standard should relinquish its reservations on such common identifiers.
The paper seems to agree with you, which is why it proposes to remove those words from the reserved identifiers list and recategorize them as potentially reserved in the future.
I think it makes good sense. Realistically, the C language probably is not going to reserve token ever, but they want the ability to introduce identifiers like tofloat and tofastint without making code-breaking changes.
I expect it has been proposed before, but to me it seems there might be a solution that makes all parties (reasonably) happy.
Unreserve all unnecessary identifiers. If a future standard wishes to add tofloat to the standard library, then they do it. If a user wants to use this C2x feature, then they #define _C2x before any includes or compile with -std=c2x.
This is essentially equivalent to Perl’s use v5 design (or Rust’s edition design, for a recent imitation). I agree there is a lot of wisdom in it.