https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98885
--- Comment #4 from Pilar Latiesa <pilarlatiesa at gmail dot com> --- I tried: $ cat M.cpp export module M; export import :A; export import :B; $ cat A.cpp export module M:A; export class B; export class A { void f(B const &) const; }; $ cat B.cpp export module M:B; export class A; export class B { void f(A const &) const; }; $ cat A-impl.cpp module M:A; void A::f(B const &) const {} $ cat B-impl.cpp module M:B; void B::f(A const &) const {} and I got: $ ../GCC-11/bin/g++ -fmodules-ts A.cpp B.cpp M.cpp A-impl.cpp B-impl.cpp main.cpp -o foo A-impl.cpp:5:1: error: ‘A’ has not been declared 5 | A::f(B const &) const {} | ^ A-impl.cpp:5:1: error: variable or field ‘f’ declared void A-impl.cpp:5:6: error: ‘B’ was not declared in this scope 5 | A::f(B const &) const {} | ^ A-impl.cpp:2:1: warning: not writing module ‘M:A’ due to errors 2 | module M:A; | ^~~~~~ B-impl.cpp:5:1: error: ‘B’ has not been declared 5 | B::f(A const &) const {} | ^ B-impl.cpp:5:1: error: variable or field ‘f’ declared void B-impl.cpp:5:6: error: ‘A’ was not declared in this scope 5 | B::f(A const &) const {} | ^ B-impl.cpp:2:1: warning: not writing module ‘M:B’ due to errors 2 | module M:B; | ^~~~~~