1f595003eSChuanqi Xu// RUN: rm -rf %t
2f595003eSChuanqi Xu// RUN: split-file %s %t
3f595003eSChuanqi Xu// RUN: cd %t
4f595003eSChuanqi Xu//
5f595003eSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-module-interface -o %t/A.pcm
6f595003eSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t -I%t %t/Use.cppm -verify -fsyntax-only
7f595003eSChuanqi Xu
8f595003eSChuanqi Xu//--- foo.h
9f595003eSChuanqi Xutemplate <typename T, typename U = int>
10f595003eSChuanqi Xuclass Templ;
11f595003eSChuanqi Xu
12f595003eSChuanqi Xutemplate <typename T, typename U>
13*5791bcf9SChuanqi Xuclass Templ {
14*5791bcf9SChuanqi Xupublic:
15*5791bcf9SChuanqi Xu    Templ(T t) {}
16*5791bcf9SChuanqi Xu};
17f595003eSChuanqi Xu
18f595003eSChuanqi Xutemplate <typename T>
19f595003eSChuanqi XuTempl(T t) -> Templ<T, int>;
20f595003eSChuanqi Xu
21f595003eSChuanqi Xu//--- A.cppm
22f595003eSChuanqi Xumodule;
23f595003eSChuanqi Xu#include "foo.h"
24f595003eSChuanqi Xuexport module A;
25f595003eSChuanqi Xu
26f595003eSChuanqi Xu//--- Use.cppm
27f595003eSChuanqi Xu// expected-no-diagnostics
28f595003eSChuanqi Xumodule;
29f595003eSChuanqi Xu#include "foo.h"
30f595003eSChuanqi Xuexport module X;
31f595003eSChuanqi Xuimport A;
32*5791bcf9SChuanqi Xuvoid foo() {
33*5791bcf9SChuanqi Xu    Templ t(0);
34*5791bcf9SChuanqi Xu}
35