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

            Bug ID: 120503
           Summary: P2115R0 (merging unnamed enumerations) is not fully
                    implemented
           Product: gcc
           Version: 15.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gulackeg at gmail dot com
  Target Milestone: ---

On the webpage "C++ Standards Support in GCC"[1], P2115R0[2] is marked as
available since GCC 11. However, this does not appear to reflect the current
state of implementation. The following test code[3], derived from the paper,
illustrates the issue:

  // Frob.cpp
  template <auto V> int Frob() { return int(V); }
  enum { A = 195'936'478 };
  template int Frob<A>();

  // main.cpp
  enum { Noise };

  template <auto V> int Frob() { return int(V); }
  enum { A = 195'936'478 };
  extern template int Frob<A>();

  int main() { Frob<A>(); }

Linking the above code results in the following error:

  main.cpp:7:(.text+0x5): undefined reference to
`_Z4FrobITnDaL8._anon_1195936478EEiv'

According to the paper, this code should be well-formed, as the mangled name
for the type of `A` is expected to remain consistent across translation units
(by using the name of the first enumerator—`A`).

  [1] https://gcc.gnu.org/projects/cxx-status.html#cxx20
  [2] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2115r0.html
  [3] https://godbolt.org/z/coxPKrGva

Reply via email to