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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nshead at gcc dot gnu.org

--- Comment #2 from Nathaniel Shead <nshead at gcc dot gnu.org> ---
A related-looking issue:


$ cat a.hpp
template <typename T>
struct X {
  T* get();
};

struct S;
inline X<S> x;

$ cat b.hpp
struct S { int y = 0; };

$ cat c.cpp
import "a.hpp";
import "b.hpp";

//template struct X<S>;   (!!)
int main() {
  int b = x.get()->y;
}

$ g++ -std=c++20 -fmodules-ts -S a.hpp b.hpp c.cpp
c.cpp: In function ‘int main()’:
c.cpp:6:18: error: invalid use of incomplete type ‘struct S’
    6 |   int b = x.get()->y;
      |                  ^~
In module ./a.hpp, imported at c.cpp:1:
a.hpp:6:8: note: forward declaration of ‘struct S’
    6 | struct S;
      |    


Uncommenting the marked line resolves this particular issue by forcing a new
instantiation of X<S>.

Reply via email to