https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114229
Bug ID: 114229 Summary: [modules] duplicate symbols when including stl in submodule Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nickbegg at gmail dot com Target Milestone: --- using the same test src code as PR113930 - // submod.mpp module; #include <iostream> export module modA:submod; // modA.mpp module; export module modA; export import :submod; // main.cpp #include <string> import modA; std::string test_func() { return ""; } Note that this test code causes #113930 to check in a GCC debug build. With a GCC release build, at link time numerous STL symbols become duplicated - % /home/nick/inst/gcc-trunk-release/bin/g++ -freport-bug -g CMakeFiles/moduleMin.dir/main.cpp.o CMakeFiles/moduleMin.dir/submod.mpp.o CMakeFiles/moduleMin.dir/modA.mpp.o -o moduleMin /usr/bin/ld: CMakeFiles/moduleMin.dir/modA.mpp.o:(.rodata+0x40): multiple definition of `vtable for std::basic_ios<wchar_t, std::char_traits<wchar_t> >'; CMakeFiles/moduleMin.dir/main.cpp.o:(.rodata+0x950): first defined here /usr/bin/ld: CMakeFiles/moduleMin.dir/modA.mpp.o:(.rodata+0x60): multiple definition of `vtable for std::basic_ostream<wchar_t, std::char_traits<wchar_t> >'; CMakeFiles/moduleMin.dir/main.cpp.o:(.rodata+0x8f0): first defined here /usr/bin/ld: CMakeFiles/moduleMin.dir/modA.mpp.o:(.rodata+0xb0): multiple definition of `VTT for std::basic_ostream<wchar_t, std::char_traits<wchar_t> >'; CMakeFiles/moduleMin.dir/main.cpp.o:(.rodata+0x940): first defined here /usr/bin/ld: CMakeFiles/moduleMin.dir/modA.mpp.o:(.rodata+0xc0): multiple definition of `vtable for std::basic_istream<wchar_t, std::char_traits<wchar_t> >'; CMakeFiles/moduleMin.dir/main.cpp.o:(.rodata+0x740): first defined here [snip] Note that #including <iostream> in both places (rather than string in main.cpp) resolves the issue - Is the include guard mechanism failing?