1*4983fdfeSChuanqi Xu// RUN: rm -rf %t 2*4983fdfeSChuanqi Xu// RUN: mkdir %t 3*4983fdfeSChuanqi Xu// RUN: split-file %s %t 4*4983fdfeSChuanqi Xu// 5*4983fdfeSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/Templ.cppm -emit-module-interface -o %t/Templ.pcm 6*4983fdfeSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -verify -fsyntax-only 7*4983fdfeSChuanqi Xu 8*4983fdfeSChuanqi Xu//--- Templ.cppm 9*4983fdfeSChuanqi Xuexport module Templ; 10*4983fdfeSChuanqi Xutemplate <typename T> 11*4983fdfeSChuanqi Xuclass Templ { 12*4983fdfeSChuanqi Xupublic: 13*4983fdfeSChuanqi Xu Templ(T a) {} 14*4983fdfeSChuanqi Xu}; 15*4983fdfeSChuanqi Xu 16*4983fdfeSChuanqi Xutemplate<typename T> 17*4983fdfeSChuanqi XuTempl(T t) -> Templ<T>; 18*4983fdfeSChuanqi Xu 19*4983fdfeSChuanqi Xu//--- Use.cpp 20*4983fdfeSChuanqi Xuimport Templ; 21*4983fdfeSChuanqi Xuvoid func() { 22*4983fdfeSChuanqi Xu Templ t(5); // expected-error {{declaration of 'Templ' must be imported from module 'Templ' before it is required}} 23*4983fdfeSChuanqi Xu // expected-error@-1 {{unknown type name 'Templ'}} 24*4983fdfeSChuanqi Xu // [email protected]:3 {{declaration here is not visible}} 25*4983fdfeSChuanqi Xu} 26*4983fdfeSChuanqi Xu 27