| // RUN: rm -rf %t | |
| // RUN: mkdir %t | |
| // RUN: split-file %s %t | |
| // RUN: %clang_cc1 -std=c++20 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t %t/main.cpp -o %t/main.o | |
| //--- V.h | |
| #ifndef V_H | |
| #define V_H | |
| class A { | |
| public: | |
| constexpr A() { } | |
| constexpr ~A() { } | |
| }; | |
| template <typename T> | |
| class V { | |
| public: | |
| V() = default; | |
| constexpr V(int n, const A& a = A()) {} | |
| }; | |
| #endif | |
| //--- inst1.h | |
| #include "V.h" | |
| static void inst1() { | |
| V<int> v; | |
| } | |
| //--- inst2.h | |
| #include "V.h" | |
| static void inst2() { | |
| V<int> v(100); | |
| } | |
| //--- module.modulemap | |
| module "M" { | |
| export * | |
| module "V.h" { | |
| export * | |
| header "V.h" | |
| } | |
| module "inst1.h" { | |
| export * | |
| header "inst1.h" | |
| } | |
| } | |
| module "inst2.h" { | |
| export * | |
| header "inst2.h" | |
| } | |
| //--- main.cpp | |
| #include "V.h" | |
| #include "inst2.h" | |
| static void m() { | |
| static V<int> v(100); | |
| } |