You have completely different concepts mixed together: storage class, linkage type and type deduction.
The former storage class register has been permanently removed from the language. The word remains key, but not used. In any case, this storage class only makes sense in the definition of an object. A class field declaration is not a definition. Moreover, C ++ initially allowed the use of this storage class only with "short-lived", i.e. local objects. (The same applies to the auto keyword in its original meaning.)
The extern keyword is primarily intended for managing linkage and it makes sense to specify it only when referring to entities that live in the namespace scope, that is, in practical terms, entities that can generate exported / imported characters in the object file — global variables and functions. A nonstatic class field is not.
The auto keyword in C ++ is no longer the storage class specifier, but denotes the deductible type in the declaration. Deduction of types for non-static class fields in C ++ is not supported.
The static in the context of declaring a class member has its own special meaning, which has little to do with the meaning of this keyword in other contexts. It is for this special meaning that it is supported in class member declarations.
registerhas long been excluded from the language. Andautohas long lost its original meaning and acquired a new, not connected with it. - AnT