https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114990
Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ppalka at gcc dot gnu.org Depends on| |99000 --- Comment #1 from Patrick Palka <ppalka at gcc dot gnu.org> --- After preprocessing, it seems Main.cpp basically boils down to: import CompilerVersions; // #1 #include <type_traits> // #2 import TypeTraits; // #3 int main() { return 0; } The issue here seems to be the #include <type_traits> appearing after the import of CompilerVersions which (indirectly) also includes <type_traits> (in its GMF). GCC currently supports import-after-include GMF merging (so #2 followed by #3 is OK) not but include-after-import. See also https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Modules.html So one workaround would be to arrange that all #includes come before imports which might include the same thing. Another workaround would be to compile the problematic headers (<type_traits> in this case) as a header unit so that #includes thereof implicitly translated into imports, via e.g. g++ -fmodules-ts -x c++-system-header type_traits Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99000 [Bug 99000] [modules] merging of textual redefinitions: declaration std::__copy_move_a2 conflicts with import