https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106851
Bug ID: 106851 Summary: [modules] Name conflict for exported using-declaration Product: gcc Version: 13.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Blocks: 103524 Target Milestone: --- $ cat lib.h namespace outer { template<typename T> void any_of(T) { } namespace inner { struct A { }; inline constexpr A any_of; } } $ gcc -c -std=c++23 -fmodules-ts -x c++-header lib.h $ cat lib.cc export module lib; import "lib.h"; export using outer::any_of; export using outer::inner::any_of; $ gcc -c -std=c++23 -fmodules-ts lib.cc lib.cc:6:28: error: ‘constexpr const outer::inner::A outer::inner::any_of’ conflicts with a previous declaration 6 | export using outer::inner::any_of; | ^~~~~~ In module ./lib.h, imported at lib.cc:3: lib.h:2:29: note: previous declaration ‘void outer::any_of(T)’ 2 | template<typename T> void any_of(T) { } | ^~~~~~ lib.cc:1:8: warning: not writing module ‘lib’ due to errors 1 | export module lib; | ^~~~~~ The names are in different scopes, shouldn't they be exported that way too? Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103524 [Bug 103524] [meta-bug] modules issue