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