https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63452
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- You have two different definitions of foo::Impl, which violates the One Definition Rule. The linker only keeps one version of the symbol You need to rename one of the Impl base classes, or put them in different namespaces (e.g. two different anonymous namespaces)