https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79961
--- Comment #14 from Pedro Alves <palves at redhat dot com> --- I had forgotten about this bug, and when I re-read it, the idea of letting the user refer to the parameter by name crossed my mind. Like, make it possible to write: void foo (int, const char *arg) __attribute__ ((__nonnull__ (arg))); instead of this when foo is a class method: void foo (int, const char *arg) __attribute__ ((__nonnull__ (3))); and this when it's a free function: void foo (int, const char *arg) __attribute__ ((__nonnull__ (3))); Thus, removing the ambiguity, and probably making it easier for humans to grok the intention, removing the need to count parameters. Slightly off topic, but I thought I'd record it.