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()37void h() { 38 A<int> a; 39 a + a; 40 func_1(a, 0); 41 } 42