c++: defaulted op== for incomplete class [PR107291]
After complaining about lack of friendship, we should not try to go on and define the defaulted comparison operator anyway. PR c++/107291 gcc/cp/ChangeLog: * method.cc (early_check_defaulted_comparison): Fail if not friend. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/spaceship-eq17.C: New test.
This commit is contained in:
parent
66eebab468
commit
c5d34912ad
2 changed files with 10 additions and 1 deletions
|
@ -1228,7 +1228,11 @@ early_check_defaulted_comparison (tree fn)
|
|||
/* Defaulted outside the class body. */
|
||||
ctx = TYPE_MAIN_VARIANT (parmtype);
|
||||
if (!is_friend (ctx, fn))
|
||||
error_at (loc, "defaulted %qD is not a friend of %qT", fn, ctx);
|
||||
{
|
||||
error_at (loc, "defaulted %qD is not a friend of %qT", fn, ctx);
|
||||
inform (location_of (ctx), "declared here");
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
else if (!same_type_ignoring_top_level_qualifiers_p (parmtype, ctx))
|
||||
saw_bad = true;
|
||||
|
|
5
gcc/testsuite/g++.dg/cpp2a/spaceship-eq17.C
Normal file
5
gcc/testsuite/g++.dg/cpp2a/spaceship-eq17.C
Normal file
|
@ -0,0 +1,5 @@
|
|||
// PR c++/107291
|
||||
// { dg-do compile { target c++20 } }
|
||||
|
||||
struct S4; // { dg-message "declared here" }
|
||||
bool operator==(S4 const &, S4 const &) = default; // { dg-error "not a friend" }
|
Loading…
Add table
Reference in a new issue