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