On Fri, May 18, 2018 at 09:02:08AM -0400, Nathan Sidwell wrote: > On 05/18/2018 08:53 AM, Marc Glisse wrote: > > > As long as you do not dereference ptr in the constructor, that shouldn't > > contradict 'restrict'. The PR gives this quote from the standard: > > > > "During the construction of an object, if the value of the object or any > > of its subobjects is accessed through a glvalue that is not obtained, > > directly or indirectly, from the constructor’s this pointer, the value > > of the object or subobject thus obtained is unspecified." > > > > which reads quite close to saying that 'this' is restrict. > Indeed it is, thanks. > > what about comparisons to this? I thought restrict implied such a > comparison was 'never the same'? > > ie. if the ctor was: > selfie (selfie *ptr) : me (ptr==this ? 0 : ptr) {}
But what is invalid on: struct S { int foo (S *); int a; } s { 2 }; int S::foo (S *x) { int b = this->a; x->a = 5; b += this->a; return b; } int main () { if (s.foo (&s) != 7) abort (); } I think if you make this a restrict pointer, this will be miscompiled. Jakub