https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118799

            Bug ID: 118799
           Summary: [15 Regression] [modules] error on typedefs in
                    anonymous namespace
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nshead at gcc dot gnu.org
  Target Milestone: ---

A typedef or alias declaration in a module interface is incorrectly labelled as
an exposure:

  // test.cpp
  export module M;
  namespace {
    using A = int;
    typedef int B;
  }

g++ -fmodules -S test.cpp:

test.cpp:4:9: error: ‘using {anonymous}::A = int’ exposes TU-local entity
‘{anonymous}’
    4 |   using A = int;
      |         ^
test.cpp:3:1: note: ‘{anonymous}’ declared with internal linkage
    3 | namespace {
      | ^~~~~~~~~
test.cpp:5:15: error: ‘{anonymous}::B’ exposes TU-local entity ‘{anonymous}’
    5 |   typedef int B;
      |               ^
test.cpp:3:1: note: ‘{anonymous}’ declared with internal linkage
    3 | namespace {
      | ^~~~~~~~~

A type alias is not an entity and so any exposures in the declaration are not
ill-formed, as this is limited to non-TU-local entities by
https://eel.is/c++draft/basic.link#17.

Reply via email to