I want to reshoot a question based on the answer and appending discussion of:
Why is a non static data member reference not a variable?:
A non-st
The argumentation in the accepted answer seems logical to me but it is, based on my understanding of the variable-definition above, conflicting with the standard.
There is no conflict with the standard, you've misunderstood the text you quote from §3.6.
A non-static data member is not an object, so it's not a variable either.
An object occupies a region of storage for the duration of its lifetime (see [intro.object]). A non-static data member declaration does not begin the lifetime of some thing that occupies a region of storage. So it doesn't create an object.
When you construct an object of the class' type there will be a sub-object corresponding to the data member, but that subobject is created when the enclosing object is created, and only exists for the object's lifetime. It is not created by the declaration of the data member in the class.
i.e. a subobject for the data member is created when the class object that contains it is created, not when the data member is declared.
So if it's not an object, then it's not a variable.
Question Are non-static non-reference data member declarations variables,
No.