https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94061
Frank Heckenbach <f.heckenb...@fh-soft.de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |f.heckenb...@fh-soft.de --- Comment #1 from Frank Heckenbach <f.heckenb...@fh-soft.de> --- I ran into the same problem. Interestingly, clang also seems to reject it, so maybe it is wrong by the letter of the standard? Though it would seem strange to me -- after all, when manually implementing B::operator<=> a protected operator in A will do fine. I hope someone who knows the standard more intimately can confirm whether that's so and possibly open a defect report to the standard. Fun fact: When I independently created a minimal test program, my result was exactly identical to yours (modulo whitespace), including the names of the structs. :)