dblaikie added a comment. Hey - thanks for this! Does look like it reproduces in modules:
foo.h: #pragma once template <typename T> struct outer { static void func() { } }; template<typename T> void func() { } extern template struct outer<int>; extern template void func<int>(); inline void caller() { outer<int>::func(); func<int>(); } foo.modulemap: module foo { header "foo.h" } use.cpp: #include "foo.h" template struct outer<int>; template void func<int>(); int main() { } Commands: clang-tot -cc1 -fmodules-codegen -fmodules -emit-module -fmodule-name=foo foo.modulemap -x c++ -o foo.pcm clang-tot -cc1 -fmodules -fmodule-file=foo.pcm use.cpp -emit-obj clang-tot -c foo.pcm clang-tot foo.o use.o This test case exercises both a member function of a class template, and a standalone function template. I'd like to better understand why this shows up for function templates but not member functions of class templates - perhaps there's somewhere the solution to both cases can be unified. Ah, if I mark the standalone function template 'inline' (the implicit linkage of member functions) then I get the same failure for both. Haven't tested whether the fix is the same fix for both yet. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69779/new/ https://reviews.llvm.org/D69779 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits