xref: /llvm-project/clang/test/Modules/template-pack.cppm (revision da00c60dae0040185dc45039c4397f6e746548e9)
1e76e3a09SChuanqi Xu// RUN: rm -rf %t
2e76e3a09SChuanqi Xu// RUN: mkdir -p %t
3e76e3a09SChuanqi Xu// RUN: split-file %s %t
4e76e3a09SChuanqi Xu//
5e76e3a09SChuanqi Xu// RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/a.cppm -o %t/a.pcm
6e76e3a09SChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/b.cppm -fprebuilt-module-path=%t -fsyntax-only -verify
7e76e3a09SChuanqi Xu
8*da00c60dSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/a.cppm -o %t/a.pcm
9*da00c60dSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/b.cppm -fprebuilt-module-path=%t -fsyntax-only -verify
10*da00c60dSChuanqi Xu
11e76e3a09SChuanqi Xu//--- foo.h
12e76e3a09SChuanqi Xu
13e76e3a09SChuanqi Xunamespace std
14e76e3a09SChuanqi Xu{
15e76e3a09SChuanqi Xu    template<class _Dom1>
16e76e3a09SChuanqi Xu    void operator &&(_Dom1 __v, _Dom1 __w)
17e76e3a09SChuanqi Xu    {
18e76e3a09SChuanqi Xu        return;
19e76e3a09SChuanqi Xu    }
20e76e3a09SChuanqi Xu}
21e76e3a09SChuanqi Xu
22e76e3a09SChuanqi Xu//--- bar.h
23e76e3a09SChuanqi Xunamespace std
24e76e3a09SChuanqi Xu{
25e76e3a09SChuanqi Xu  template<typename... _Types>
26e76e3a09SChuanqi Xu    struct _Traits
27e76e3a09SChuanqi Xu    {
28e76e3a09SChuanqi Xu      static constexpr bool _S_copy_ctor =
29e76e3a09SChuanqi Xu   (__is_trivial(_Types) && ...);
30e76e3a09SChuanqi Xu    };
31e76e3a09SChuanqi Xu
32e76e3a09SChuanqi Xu  template<typename... _Types>
33e76e3a09SChuanqi Xu    struct variant
34e76e3a09SChuanqi Xu    {
35e76e3a09SChuanqi Xu      void
36e76e3a09SChuanqi Xu      swap(variant& __rhs)
37e76e3a09SChuanqi Xu      noexcept((__is_trivial(_Types) && ...))
38e76e3a09SChuanqi Xu      {
39e76e3a09SChuanqi Xu      }
40e76e3a09SChuanqi Xu    };
41e76e3a09SChuanqi Xu}
42e76e3a09SChuanqi Xu
43e76e3a09SChuanqi Xu//--- a.cppm
44e76e3a09SChuanqi Xumodule;
45e76e3a09SChuanqi Xu#include "foo.h"
46e76e3a09SChuanqi Xu#include "bar.h"
47e76e3a09SChuanqi Xuexport module a;
48e76e3a09SChuanqi Xu
49e76e3a09SChuanqi Xu//--- b.cppm
50e76e3a09SChuanqi Xu// expected-no-diagnostics
51e76e3a09SChuanqi Xumodule;
52e76e3a09SChuanqi Xu#include "bar.h"
53e76e3a09SChuanqi Xuexport module b;
54e76e3a09SChuanqi Xuimport a;
55