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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2025-11-30
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #2 from Nathaniel Shead <nshead at gcc dot gnu.org> ---
Confirmed.  Mostly reduced:

  // m.hpp
  template <typename> struct allocator {
    friend void operator==(allocator, allocator) {}
  };
  struct reverse_iterator operator==(reverse_iterator, reverse_iterator);
  struct string {
    template <typename T> void foo() { T{} == 0; }
  };

  // m.cpp
  module;
  #include "m.hpp"
  export module M;
  export using ::string;
  export using ::allocator;

  // a.cpp
  export module VF:Tensor;
  import M;
  template<int d, int r1> struct TTensor {
    TTensor<d, r1 - 1u> TensorArr[d];
    void Read(string s);
  };
  template<int d> struct TTensor<d, 0u> {};

  // b.cpp
  module;
  #include "m.hpp"
  export module VF;
  export import :Tensor;
  int TCara(allocator<TTensor<2, 1> const *> PtoPtrVec_);
  int r = TCara(allocator<TTensor<2, 1> const*>{});
  export template<int d, int r>
  void TCampo() { new TTensor<d, r>(); }

  // c.cpp
  import VF;
  int main() {
    TCampo<2, 1>();
  }

$ g++ -std=c++17 -fmodules -S m.cpp [abc].cpp
In module VF, imported at c.cpp:1:
b.cpp: In instantiation of ‘void TCampo@VF() [with int d = 2; int r = 1]’:
required from here
c.cpp:4:15:
    4 |   TCampo<2, 1>();
      |   ~~~~~~~~~~~~^~
b.cpp:10:17: error: value-initialization of incomplete type ‘TTensor@VF<2, 0>
[2]’
   10 | void TCampo() { new TTensor<d, r>(); }
      |                 ^~~~~~~~~~~~~~~~~~~

Reply via email to