1*6d9b8479SChuanqi Xu// RUN: rm -rf %t
2*6d9b8479SChuanqi Xu// RUN: split-file %s %t
3*6d9b8479SChuanqi Xu// RUN: cd %t
4*6d9b8479SChuanqi Xu//
5*6d9b8479SChuanqi Xu// RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/A.cppm -o %t/A.pcm
6*6d9b8479SChuanqi Xu// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only -verify
7*6d9b8479SChuanqi Xu//
8*6d9b8479SChuanqi Xu//--- foo.h
9*6d9b8479SChuanqi Xutemplate<typename T, typename U>
10*6d9b8479SChuanqi Xuinline constexpr bool IsSame = false;
11*6d9b8479SChuanqi Xu
12*6d9b8479SChuanqi Xutemplate<typename T>
13*6d9b8479SChuanqi Xuinline constexpr bool IsSame<T, T> = true;
14*6d9b8479SChuanqi Xu
15*6d9b8479SChuanqi Xutemplate <typename T>
16*6d9b8479SChuanqi Xuclass A {
17*6d9b8479SChuanqi Xupublic:
18*6d9b8479SChuanqi Xu    A();
19*6d9b8479SChuanqi Xu    ~A() noexcept(IsSame<T, T>);
20*6d9b8479SChuanqi Xu};
21*6d9b8479SChuanqi Xu
22*6d9b8479SChuanqi Xu//--- A.cppm
23*6d9b8479SChuanqi Xumodule;
24*6d9b8479SChuanqi Xu#include "foo.h"
25*6d9b8479SChuanqi Xuexport module A;
26*6d9b8479SChuanqi Xuexport using ::A;
27*6d9b8479SChuanqi Xu
28*6d9b8479SChuanqi Xu//--- Use.cpp
29*6d9b8479SChuanqi Xuimport A;
30*6d9b8479SChuanqi Xuvoid bool_consume(bool b);
31*6d9b8479SChuanqi Xuvoid use() {
32*6d9b8479SChuanqi Xu    A<int> a{};
33*6d9b8479SChuanqi Xu    bool_consume(IsSame); // expected-error {{use of undeclared identifier 'IsSame'}}
34*6d9b8479SChuanqi Xu}
35