https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119674
Bug ID: 119674
Summary: defaulted assignment operator with xobj syntax is an
xobj function instead of an iobj function
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: waffl3x at gcc dot gnu.org
Target Milestone: ---
dcl.fct.def.default p2
An explicitly defaulted special member function F1 is allowed to differ
from the corresponding special member function F2 that would have been
implicitly declared, as follows:
(2.2) if F2 has an implicit object parameter of type “reference to C”,
F1 may be an explicit object member function whose explicit
object parameter is of (possibly different) type “reference to
C”, in which case the type of F1 would differ from the type of F2
in that the type of F1 has an additional parameter;
I am interpreting this to mean that the declaration of the function
that is defaulted does not effect the actual function that is
generated. I assume there is another passage somewhere that specifies
this more directly.
I'm not 100% sure if my interpretation is correct, but if it is our
current implementation is not.
```
struct S0 {
S0& operator=(S0 const&) = default;
};
struct S1 {
S1& operator=(this S1&, S1 const&) = default;
};
int main()
{
// well-formed, accepted
S0& (S0::* p0)(S0 const&) = &S0::operator=;
// well-formed, rejected
S1& (S1::* p1)(S1 const&) = &S1::operator=;
// ill-formed, rejected
S0& (* p2)(S0&, S0 const&) = &S0::operator=;
// ill-formed, accepted
S1& (* p3)(S1&, S1 const&) = &S1::operator=;
}
```