1 // RUN: rm -rf %t
2 // 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
3 
4 template<typename T> struct A;
5 template<typename T> struct B;
6 template<typename T> struct C;
7 template<typename T = int> struct D;
8 template<typename T = int> struct E {};
9 template<typename T> struct H {};
10 template<typename T = int, typename U = int> struct I {};
11 
12 #include "b.h"
13 
14 template<typename T = int> struct A {};
15 template<typename T> struct B {};
16 template<typename T = int> struct B;
17 template<typename T = int> struct C;
18 template<typename T> struct D {};
19 template<typename T> struct F {};
20 template<typename T> struct G {};
21 
22 #include "c.h"
23 
24 A<> a;
25 B<> b;
26 extern C<> c;
27 D<> d;
28 E<> e;
29 F<> f;
30 G<> g; // expected-error {{default argument of 'G' must be imported from module 'X.A' before it is required}}
31 // [email protected]:6 {{default argument declared here}}
32 H<> h; // expected-error {{default argument of 'H' must be imported from module 'X.A' before it is required}}
33 // [email protected]:7 {{default argument declared here}}
34 I<> i;
35