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