mstorsjo wrote: I managed to reduce this case further. Not entirely sure if it really managed to pinpoint the same thing or if it diverged into something else, but this snippet produces a different set of defined/undefined symbols before and after this change.
```c++ namespace a { typedef int b; } class c; class d { template <typename = int> void e(c *, int, int); }; class f { public: static bool g; }; template <typename> struct h { template <typename, typename... i> static bool j(i...); }; template <> template <typename, typename... i> bool h<d>::j(i...) { f::g ? h<int>::j<int> : 0; } template <> template <typename, typename... i> bool h<int>::j(i...) {} template void d::e(c *, a::b, int); template <typename> void d::e(c *, int, int) { f::g ? h<int>::j<int>() : 0; } ``` https://github.com/llvm/llvm-project/pull/106585 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits