https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89358
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- It's true that the two bases are defined in different translation units, but that's irrelevant. What the C++ language requires is that the definitions consist of the same sequence of tokens, it doesn't matter which file they are defined in. If I am allergic to headers it's perfectly fine to copy & paste the same code into the top of every translation unit instead of using headers. The relevant rule is http://eel.is/c++draft/basic.def.odr#12 and the example above doesn't violate it.