|  | // RUN: rm -rf %t | 
|  | // RUN: mkdir -p %t | 
|  | // RUN: split-file %s %t | 
|  | // | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/lib.cppm -o %t/lib.pcm | 
|  | // RUN: %clang_cc1 -std=c++20 %t/main.cpp -fmodule-file=lib=%t/lib.pcm \ | 
|  | // RUN:     -verify -fsyntax-only | 
|  |  | 
|  | // Test again with reduced BMI | 
|  | // RUN: rm -rf %t | 
|  | // RUN: mkdir -p %t | 
|  | // RUN: split-file %s %t | 
|  | // | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/lib.cppm -o %t/lib.pcm | 
|  | // RUN: %clang_cc1 -std=c++20 %t/main.cpp -fmodule-file=lib=%t/lib.pcm \ | 
|  | // RUN:     -verify -fsyntax-only | 
|  |  | 
|  | //--- header.h | 
|  | namespace lib::inline __1 { | 
|  | template <class> | 
|  | inline constexpr bool test = false; | 
|  | template <class> | 
|  | constexpr bool func() { | 
|  | return false; | 
|  | } | 
|  | inline constexpr bool non_templ = true; | 
|  | } // namespace lib | 
|  |  | 
|  | //--- lib.cppm | 
|  | module; | 
|  | #include "header.h" | 
|  | export module lib; | 
|  |  | 
|  | export namespace lib { | 
|  | using lib::test; | 
|  | using lib::func; | 
|  | using lib::non_templ; | 
|  | } // namespace lib | 
|  |  | 
|  | //--- main.cpp | 
|  | // expected-no-diagnostics | 
|  | import lib; | 
|  |  | 
|  | struct foo {}; | 
|  |  | 
|  | template <> | 
|  | inline constexpr bool lib::test<foo> = true; | 
|  |  | 
|  | template <> | 
|  | constexpr bool lib::func<foo>() { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | static_assert(lib::test<foo>); | 
|  | static_assert(lib::func<foo>()); |