1 // RUN: %clang_cc1 -fmodules -std=c++14 %s -verify
2 // expected-no-diagnostics
3 
4 #pragma clang module build A
5 module A {}
6 #pragma clang module contents
7 #pragma clang module begin A
8 template<typename T> struct A {
operator +(const A &,const A &)9   friend A operator+(const A&, const A&) { return {}; }
func_1(const A &,const T2 &)10   template<typename T2> friend void func_1(const A&, const T2 &) {}
11 };
12 #pragma clang module end
13 #pragma clang module endbuild
14 
15 #pragma clang module build B
16 module B {}
17 #pragma clang module contents
18 #pragma clang module begin B
19 #pragma clang module import A
20 inline void f() { A<int> a; }
21 #pragma clang module end
22 #pragma clang module endbuild
23 
24 #pragma clang module build C
25 module C {}
26 #pragma clang module contents
27 #pragma clang module begin C
28 #pragma clang module import A
29 inline void g() { A<int> a; }
30 #pragma clang module end
31 #pragma clang module endbuild
32 
33 #pragma clang module import A
34 #pragma clang module import B
35 #pragma clang module import C
36 
h()37 void h() {
38   A<int> a;
39   a + a;
40   func_1(a, 0);
41 }
42