rupprecht added a comment. I threw this at the "test everything" test (some millions of targets) and it found only one breakage, so this is very very close. Without further ado, here is this silly looking thing:
File `blah.h`: #include <functional> #include <memory> template <typename T> struct Base { virtual ~Base() = default; }; class Impl : public Base<int> {}; struct ImplHolder { std::unique_ptr<Base<int>> impl = std::make_unique<Impl>(); }; struct GetImplCreators { std::function<ImplHolder()> impl_creator = []() { return ImplHolder{}; }; }; void UseImpl(GetImplCreators impl_creators = GetImplCreators{}); And `blah.cc`: #include "blah.h" void UseImpl(GetImplCreators impl_creators) {} And lastly, `blah_main.cc`: #include "blah.h" void Func1() { UseImpl(); } // Note: it also fails when we explicitly specify the default arg, in case that is interesting. // void Func2() { UseImpl(GetImplCreators()); } int main(int argc, char* argv[]) { return 0; } And here's the LLD output: ld: error: undefined hidden symbol: std::__u::__unique_if<Impl>::__unique_single std::__u::make_unique<Impl>() >>> referenced by blah_main.cc >>> blah_main.o:(ImplHolder std::__u::__function::__policy_invoker<ImplHolder ()>::__call_impl<std::__u::__function::__default_alloc_func<GetImplCreators::impl_creator::'lambda'(), ImplHolder ()>>(std::__u::__function::__policy_storage const*)) ld: error: undefined hidden symbol: std::__u::unique_ptr<Impl, std::__u::default_delete<Impl>>::~unique_ptr() >>> referenced by blah_main.cc >>> blah_main.o:(ImplHolder std::__u::__function::__policy_invoker<ImplHolder ()>::__call_impl<std::__u::__function::__default_alloc_func<GetImplCreators::impl_creator::'lambda'(), ImplHolder ()>>(std::__u::__function::__policy_storage const*)) I'm out of time today so I don't have a repro script to offer, but I can dig into that when I get back next year if the source-only example is insufficient. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D136554/new/ https://reviews.llvm.org/D136554 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits