https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113308
--- Comment #2 from waffl3x <waffl3x at protonmail dot com> --- (In reply to Nathaniel Shead from comment #1) > I believe this is correct behaviour: The definition of `operator++` in the > child class hides the `operator++` declared in the base class. Similarly to > the following code: > > > struct base { > void f(int) {} > }; > struct d1 : base { > void f() {} > }; > struct d2 : base { > using base::f; // explicitly add base::f as an overload > void f() {} > }; > > int main() { > d1{}.f(10); // error > d2{}.f(10); // OK > } I'm pretty sure Nathaniel is right, https://godbolt.org/z/d4r3dTsqa https://godbolt.org/z/sxz1rcGbb Mind you, clang and msvc's implementations are buggier than mine so I'm not going to say "doesn't work on theirs so it isn't a bug" but I don't think this one is a bug. Thank you for testing my patch though, I do appreciate it.