1 | #ifndef STRESS1_COMMON_H |
2 | #define STRESS1_COMMON_H |
3 | |
4 | inline char function00(char x) { return x + x; } |
5 | inline short function00(short x) { return x + x; } |
6 | inline int function00(int x) { return x + x; } |
7 | |
8 | namespace N01 { struct S00; } |
9 | |
10 | namespace N00 { |
11 | struct S00 { |
12 | char c; |
13 | short s; |
14 | int i; |
15 | |
16 | S00(char x) : c(x) {} |
17 | S00(short x) : s(x) {} |
18 | S00(int x) : i(x) {} |
19 | |
20 | char method00(char x) { return x + x; } |
21 | short method00(short x) { return x + x; } |
22 | int method00(int x) { return x + x; } |
23 | |
24 | operator char() { return c; } |
25 | operator short() { return s; } |
26 | operator int() { return i; } |
27 | }; |
28 | struct S01 {}; |
29 | struct S02 {}; |
30 | template <typename T> struct S03 { |
31 | struct S00 : N00::S00 {}; |
32 | }; |
33 | template <int I, template <typename> class U> struct S03<U<int>[I]> |
34 | : U<int>::S00 { |
35 | S03(); |
36 | S03(int); |
37 | S03(short); |
38 | S03(char); |
39 | template <typename V = decltype(I)> S03(V); |
40 | }; |
41 | template <> struct S03<S03<int>[42]> : S00 {}; |
42 | } |
43 | |
44 | namespace N01 { |
45 | struct S00 : N00::S00 { |
46 | using N00::S00::S00; |
47 | }; |
48 | struct S01 {}; |
49 | struct S02 {}; |
50 | } |
51 | |
52 | using namespace N00; |
53 | |
54 | template <int I, template <typename> class U> template <typename V> S03<U<int>[I]>::S03(V x) : S00(x) {} |
55 | template <int I, template <typename> class U> S03<U<int>[I]>::S03() : S00(I) {} |
56 | template <int I, template <typename> class U> S03<U<int>[I]>::S03(char x) : S00(x) {} |
57 | template <int I, template <typename> class U> S03<U<int>[I]>::S03(short x) : S00(x) {} |
58 | template <int I, template <typename> class U> S03<U<int>[I]>::S03(int x) : S00(x) {} |
59 | |
60 | #pragma weak pragma_weak00 |
61 | #pragma weak pragma_weak01 |
62 | #pragma weak pragma_weak02 |
63 | #pragma weak pragma_weak03 |
64 | #pragma weak pragma_weak04 |
65 | #pragma weak pragma_weak05 |
66 | |
67 | extern "C" int pragma_weak00(); |
68 | extern "C" int pragma_weak01(); |
69 | extern "C" int pragma_weak02(); |
70 | extern "C" int pragma_weak03; |
71 | extern "C" int pragma_weak04; |
72 | extern "C" int pragma_weak05; |
73 | |
74 | #endif |
75 | |