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

Nathaniel Shead <nshead at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[15 Regression[modules]     |[modules] Error when
                   |                            |loading an unused defaulted
                   |                            |function on top of a used
                   |                            |one

--- Comment #1 from Nathaniel Shead <nshead at gcc dot gnu.org> ---
Consider:

  // A.cpp
  module;
  struct exception_ptr {
    friend bool operator==(const exception_ptr&, const exception_ptr&) =
default;
  };
  export module M;
  export using ::exception_ptr;


  // B.cpp
  struct exception_ptr {
    friend bool operator==(const exception_ptr&, const exception_ptr&) =
default;
  };
  void enqueue() {
    exception_ptr e;
    e == e;
  }
  import M;
  int main() {
    exception_ptr e;
    e == e;
  }


$ g++ -fmodules -std=c++20 -S A.cpp B.cpp:
In module M, imported at /app/main.cpp:8:
A.cpp: In function 'int main()':
A.cpp:3:13: error: conflicting global module declaration 'bool operator==(const
exception_ptr&, const exception_ptr&)'
    3 | friend bool operator==(const exception_ptr&, const exception_ptr&) =
default;
      |             ^~~~~~~~
main.cpp:2:13: note: existing declaration 'constexpr bool operator==(const
exception_ptr&, const exception_ptr&)'
    2 | friend bool operator==(const exception_ptr&, const exception_ptr&) =
default;
      |             ^~~~~~~~
main.cpp:10:1: note: during load of binding '::exception_ptr@M'
   10 | exception_ptr e;
      | ^~~~~~~~~~~~~

Reply via email to