But the footnote does not refer to other subclauses in the standard. Which is, of course, not a proof, but a good indicator that "other ways" do not give a pointer which is considered as you know what.
Anyway. I've checked
http://eel.is/c++draft/expr.prim.this#:this
http://eel.is/c++draft/class.this#:this
and haven't found anything saying (either directly or indirectly) that `this` is considered to be a pointer to an array element of an array of size 1 for the purposes of pointer arithmetic if the method is called for an object which is not an array element.
This means that in the following code:
```
struct S { S* self() { return this; } };
int main()
{
S s;
S* p1 = &s;
S* p2 = s.self();
}
```
pointers p1 and p2, even though they have the same value (do they?), do seem to be different from the operator+'s POV, if we take the standard wording literally.
p1 was obtained using &, p2 — was not.
Well, on most implementations an expression E1.E2 is equivalent to (&E1)->E2, because the implicit object argument is a pointer, but the standard says that it is a reference and E1->E2 is equivalent to (*(E1)).E2, so I won't take implementation detail as an argument that & is actually implicitly applied.
Also, the standard doesn't specify how `this` pointer is produced, so I don't think that saying "the implicit object argument is a reference, obviously `this` is `&<implicit object argument>`" would be correct.
I've looked at [
expr.new]. It also doesn't say that the pointer returned from a non-array new expression is considered as you know what.
This means that in the following code:
```
int main()
{
int* p1 = new int;
int* p2 = &*p1;
}
```
the pointers p1 and p2 have different properties from the operator+'s POV.
Is this intentional?