The keyword this names a pointer to the object for which an implicit object member
function ([class.mfct.non.static]) is invoked or a non-static data member's
initializer ([class.mem]) is evaluated.
It shall not appear within
the declaration of
a static or explicit object member function
of the current class (although its type and value category
are defined within such member functions as they are within an implicit object
member function).
Otherwise, if a member-declarator declares a non-static data
member ([class.mem]) of a class X, the expression this is
a prvalue of type “pointer to X”
wherever X is the current class
within the
optional default member initializer ([class.mem]).
The expression this shall not appear in any other context.
[Example 2: class Outer {int a[sizeof(*this)]; // error: not inside a member functionunsignedint sz =sizeof(*this); // OK, in default member initializervoid f(){int b[sizeof(*this)]; // OKstruct Inner {int c[sizeof(*this)]; // error: not inside a member function of Inner};
}};
— end example]