xref: /llvm-project/clang/test/Modules/partial_specialization.cppm (revision da00c60dae0040185dc45039c4397f6e746548e9)
16d9b8479SChuanqi Xu// RUN: rm -rf %t
26d9b8479SChuanqi Xu// RUN: split-file %s %t
36d9b8479SChuanqi Xu// RUN: cd %t
46d9b8479SChuanqi Xu//
56d9b8479SChuanqi Xu// RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/A.cppm -o %t/A.pcm
66d9b8479SChuanqi Xu// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only -verify
76d9b8479SChuanqi 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 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only -verify
10*da00c60dSChuanqi Xu//
116d9b8479SChuanqi Xu//--- foo.h
126d9b8479SChuanqi Xutemplate<typename T, typename U>
136d9b8479SChuanqi Xuinline constexpr bool IsSame = false;
146d9b8479SChuanqi Xu
156d9b8479SChuanqi Xutemplate<typename T>
166d9b8479SChuanqi Xuinline constexpr bool IsSame<T, T> = true;
176d9b8479SChuanqi Xu
186d9b8479SChuanqi Xutemplate <typename T>
196d9b8479SChuanqi Xuclass A {
206d9b8479SChuanqi Xupublic:
216d9b8479SChuanqi Xu    A();
226d9b8479SChuanqi Xu    ~A() noexcept(IsSame<T, T>);
236d9b8479SChuanqi Xu};
246d9b8479SChuanqi Xu
256d9b8479SChuanqi Xu//--- A.cppm
266d9b8479SChuanqi Xumodule;
276d9b8479SChuanqi Xu#include "foo.h"
286d9b8479SChuanqi Xuexport module A;
296d9b8479SChuanqi Xuexport using ::A;
306d9b8479SChuanqi Xu
316d9b8479SChuanqi Xu//--- Use.cpp
326d9b8479SChuanqi Xuimport A;
336d9b8479SChuanqi Xuvoid bool_consume(bool b);
346d9b8479SChuanqi Xuvoid use() {
356d9b8479SChuanqi Xu    A<int> a{};
366d9b8479SChuanqi Xu    bool_consume(IsSame); // expected-error {{use of undeclared identifier 'IsSame'}}
376d9b8479SChuanqi Xu}
38