// Tests complex explicit constructor across modules. // // RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %t // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/Foo.cppm \ // RUN: -o %t/Foo.pcm // RUN: %clang_cc1 -std=c++20 -emit-module-interface \ // RUN: -fmodule-file=Foo=%t/Foo.pcm \ // RUN: %t/Bar.cppm \ // RUN: -o %t/Bar.pcm // RUN: %clang_cc1 -std=c++20 -emit-obj \ // RUN: -main-file-name Bar.cppm \ // RUN: -fmodule-file=Foo=%t/Foo.pcm \ // RUN: -x pcm %t/Bar.pcm \ // RUN: -o %t/Bar.o //--- Foo.cppm export module Foo; export { template class Foo { public: template explicit (sizeof...(Args) == 1) Foo(Args&&... args); }; } template template inline Foo::Foo(Args&&... args) {} //--- Bar.cppm export module Bar; import Foo; struct Bar {}; void a() { auto foo = Foo{}; }