https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99377
--- Comment #1 from Nathan Sidwell <nathan at gcc dot gnu.org> --- // bug_a.ii template<typename> struct Widget { Widget (int) { } bool First() const { return true; } bool Second () const { return true;} }; inline void Frob (const Widget<int>& w) noexcept { w.First (); } // bug_b.ii export module Foo; import "bug_a.ii"; export inline bool Check (const Widget<int>& w) { return w.Second (); } // bug_c.ii import Foo; int main () { return Check (0) ? 0 : 1; } ./cc1plus -fmodule-header -quiet bug_a.ii && ./cc1plus -quiet -fmodules-ts bug_b.ii && ./cc1plus -quiet -fmodules-ts bug_c.ii && g++ bug_b.s bug_c.s /data/users/nathans/tools/lib/gcc/x86_64-pc-linux-gnu/10.1.1/../../../../x86_64-pc-linux-gnu/bin/ld: /tmp/cc6QqMLl.o: in function `Check(Widget<int> const&)': bug_c.ii:(.text._Z5CheckRK6WidgetIiE[_Z5CheckRK6WidgetIiE]+0x14): undefined reference to `Widget<int>::Second() const' collect2: error: ld returned 1 exit status