https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102609
--- Comment #10 from Gašper Ažman <gasper.azman at gmail dot com> --- Yes, the explicit object parameter always receives the cv-l/r qualified reference to the object of the call. Implicit conversions are then of course allowed, same as any other parameter. S* is not that useful as a type of an explicit object parameter, implicit conversions to pointer to yourself are probably about as weird as overloading operator&(). Also, don't forget explicit object function bodies and their type behave a lot more like static functions than member functions. On Sat, Aug 19, 2023, 10:43 redi at gcc dot gnu.org < gcc-bugzi...@gcc.gnu.org> wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102609 > > --- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> --- > If we're right about that, then I agree that a warning would be useful for > classes that have no such implicit conversion from S to S*. > > I think the warning would give a false positive in the case below, so a > way to > disable it locally would be needed (e.g. via a diagnostic pragma). > > struct S { > int f(this S*); // warning: explicit object parameter of pointer type can > only match if an implicit conversion to S* exists > }; > > struct T : S { > operator T*(); > }; > > T t; > int i = t.f(); // derived class has the required conversion > > -- > You are receiving this mail because: > You are on the CC list for the bug.