Clang Project

clang_source_code/test/Modules/friend-definition.cpp
1// RUN: %clang_cc1 -fmodules -std=c++14 %s -verify
2// expected-no-diagnostics
3
4#pragma clang module build A
5module A {}
6#pragma clang module contents
7#pragma clang module begin A
8template<typename T> struct A {
9  friend A operator+(const A&, const A&) { return {}; }
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
16module B {}
17#pragma clang module contents
18#pragma clang module begin B
19#pragma clang module import A
20inline void f() { A<int> a; }
21#pragma clang module end
22#pragma clang module endbuild
23
24#pragma clang module build C
25module C {}
26#pragma clang module contents
27#pragma clang module begin C
28#pragma clang module import A
29inline 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
37void h() {
38  A<int> a;
39  a + a;
40  func_1(a, 0);
41}
42