https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114990
--- Comment #17 from cqwrteur <unlvsur at live dot com> --- (In reply to Jason Merrill from comment #16) > (In reply to cqwrteur from comment #15) > > But it is not declaration, but definition. The actual implementation > > duplicates twice. > > Definitions are also merged. > > > For translation units, inline function will get discarded in different > > translation units and keep only one of them as weak symbol. I don't think > > this applies to module > > Within the global module it does; importing discards duplicate definitions > much like the linker. But does that apply to classes, templates or template specialization, etc.? If someone writes a function=delete while in a module, it does not. Does it get discarded? Because for type_traits, unless the template specialization also gets discarded, this won't work. I don't think other compilers are working here, either. C++ standard never clarifies it but asks all inline function not to be inline semantics.