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

Reply via email to