// RUN: rm -fr %t // RUN: mkdir %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/foo.cppm -o %t/foo.pcm // RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -verify -fsyntax-only // //--- foo.cppm module; # 3 __FILE__ 1 // use the next physical line number here (and below) template void foo() { } template <> void foo() { } template void foo2() { } template <> void foo2() { } template void foo3() { } template <> void foo3(); export module foo; export using ::foo; export using ::foo3; export template void foo4() { } export template <> void foo4() { } //--- Use.cpp import foo; void use() { foo(); foo(); foo2(); // expected-error {{missing '#include'; 'foo2' must be declared before it is used}} // expected-note@* {{declaration here is not visible}} foo2(); // expected-error {{missing '#include'; 'foo2' must be declared before it is used}} // expected-note@* {{declaration here is not visible}} foo3(); foo3(); foo4(); foo4(); }