|  | // RUN: %clang_cc1 -fmodules -std=c++14 %s -verify | 
|  | // expected-no-diagnostics | 
|  |  | 
|  | #pragma clang module build A | 
|  | module A {} | 
|  | #pragma clang module contents | 
|  | #pragma clang module begin A | 
|  | template<typename T> struct A { | 
|  | friend A operator+(const A&, const A&) { return {}; } | 
|  | template<typename T2> friend void func_1(const A&, const T2 &) {} | 
|  | }; | 
|  | #pragma clang module end | 
|  | #pragma clang module endbuild | 
|  |  | 
|  | #pragma clang module build B | 
|  | module B {} | 
|  | #pragma clang module contents | 
|  | #pragma clang module begin B | 
|  | #pragma clang module import A | 
|  | inline void f() { A<int> a; } | 
|  | #pragma clang module end | 
|  | #pragma clang module endbuild | 
|  |  | 
|  | #pragma clang module build C | 
|  | module C {} | 
|  | #pragma clang module contents | 
|  | #pragma clang module begin C | 
|  | #pragma clang module import A | 
|  | inline void g() { A<int> a; } | 
|  | #pragma clang module end | 
|  | #pragma clang module endbuild | 
|  |  | 
|  | #pragma clang module import A | 
|  | #pragma clang module import B | 
|  | #pragma clang module import C | 
|  |  | 
|  | void h() { | 
|  | A<int> a; | 
|  | a + a; | 
|  | func_1(a, 0); | 
|  | } |