xref: /aosp_15_r20/external/clang/test/Modules/template-default-args.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: rm -rf %t
2*67e74705SXin Li // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -fno-modules-error-recovery -I %S/Inputs/template-default-args -std=c++11 %s -DBEGIN= -DEND=
3*67e74705SXin Li // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -fno-modules-error-recovery -I %S/Inputs/template-default-args -std=c++11 %s -DBEGIN="namespace N {" -DEND="}"
4*67e74705SXin Li 
5*67e74705SXin Li BEGIN
6*67e74705SXin Li template<typename T> struct A;
7*67e74705SXin Li template<typename T> struct B;
8*67e74705SXin Li template<typename T> struct C;
9*67e74705SXin Li template<typename T = int> struct D;
10*67e74705SXin Li template<typename T = int> struct E {};
11*67e74705SXin Li template<typename T> struct H {};
12*67e74705SXin Li template<typename T = int, typename U = int> struct I {};
13*67e74705SXin Li END
14*67e74705SXin Li 
15*67e74705SXin Li #include "b.h"
16*67e74705SXin Li #include "d.h"
17*67e74705SXin Li 
18*67e74705SXin Li BEGIN
19*67e74705SXin Li template<typename T = int> struct A {};
20*67e74705SXin Li template<typename T> struct B {};
21*67e74705SXin Li template<typename T = int> struct B;
22*67e74705SXin Li template<typename T = int> struct C;
23*67e74705SXin Li template<typename T> struct D {};
24*67e74705SXin Li template<typename T> struct F {};
25*67e74705SXin Li template<typename T> struct G {};
26*67e74705SXin Li template<typename T> struct J {};
27*67e74705SXin Li template<typename T = int> struct J;
28*67e74705SXin Li struct K : J<> {};
29*67e74705SXin Li END
30*67e74705SXin Li 
31*67e74705SXin Li #include "c.h"
32*67e74705SXin Li 
33*67e74705SXin Li BEGIN
34*67e74705SXin Li A<> a;
35*67e74705SXin Li B<> b;
36*67e74705SXin Li extern C<> c;
37*67e74705SXin Li D<> d;
38*67e74705SXin Li E<> e;
39*67e74705SXin Li F<> f;
40*67e74705SXin Li G<> g; // expected-error {{default argument of 'G' must be imported from module 'X.A' before it is required}}
41*67e74705SXin Li // [email protected]:7 {{default argument declared here}}
42*67e74705SXin Li H<> h; // expected-error {{default argument of 'H' must be imported from module 'X.A' before it is required}}
43*67e74705SXin Li // [email protected]:8 {{default argument declared here}}
44*67e74705SXin Li I<> i;
45*67e74705SXin Li L<> *l;
46*67e74705SXin Li END
47