https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92849
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- If name lookup finds the name in multiple base classes, the lookup is ambiguous. Overload resolution is not done to determine if one function is a better match than the other. By pulling them all into the derived class with a using-declaration it means name lookup finds them all in the same scope, and then applies overload resolution to find the best one. So I think GCC is correct.