https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85004
Bug ID: 85004 Summary: ambiguous diagnostic: passing ‘const S’ as ‘this’ argument discards qualifiers Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- When invoking a non-const member function from a const one, GCC issues an error message like those below. The error message is ambiguous: it doesn't make is clear which this it refers to. In the first case, underling the first "this" would help. In the second case rephrasing the error to say something like "passing ‘const S’ as the implicit ‘this’ argument discards qualifiers" would help avoid the confusion. $ cat u.C && gcc -S -Wall u.C struct S { void f (const S*); void g () const { this->f (this); // which 'this?' f (this); // ditto } }; u.C: In member function ‘void S::g() const’: u.C:6:18: error: passing ‘const S’ as ‘this’ argument discards qualifiers [-fpermissive] this->f (this); // which 'this?' ^ u.C:2:8: note: in call to ‘void S::f(const S*)’ void f (const S*); ^ u.C:8:12: error: passing ‘const S’ as ‘this’ argument discards qualifiers [-fpermissive] f (this); // ditto ^ u.C:2:8: note: in call to ‘void S::f(const S*)’ void f (const S*); ^