1
1
#pragma once
2
2
3
+ #define NOOPT __attribute__((optnone)) __attribute__((noinline))
4
+
3
5
struct InstanceBalanceCounter {
4
6
static inline int & theCounterValue () {
5
7
static int counterValue = 0 ;
@@ -9,36 +11,40 @@ struct InstanceBalanceCounter {
9
11
return theCounterValue ();
10
12
}
11
13
12
- __attribute__(( optnone ))
14
+ NOOPT
13
15
InstanceBalanceCounter () {
14
16
++ theCounterValue ();
15
17
}
16
- __attribute__(( optnone ))
18
+ NOOPT
17
19
InstanceBalanceCounter (const InstanceBalanceCounter & ) {
18
20
++ theCounterValue ();
19
21
}
20
- __attribute__(( optnone ))
22
+ NOOPT
21
23
InstanceBalanceCounter (InstanceBalanceCounter && ) {
22
24
++ theCounterValue ();
23
25
}
24
- __attribute__(( optnone ))
26
+ NOOPT
25
27
~InstanceBalanceCounter () {
26
28
-- theCounterValue ();
27
29
}
28
30
};
29
31
30
- __attribute__((optnone ))
32
+ #ifdef EXTERN_FUNC
33
+ extern void someFunc ();
34
+ #else
35
+ NOOPT
31
36
inline void someFunc () {}
37
+ #endif
32
38
33
39
struct NonTrivialCopyAssign {
34
- __attribute__(( optnone ))
40
+ NOOPT
35
41
NonTrivialCopyAssign (): copyAssignCounter (0 ) {}
36
- __attribute__(( optnone ))
42
+ NOOPT
37
43
~NonTrivialCopyAssign () {
38
44
someFunc ();
39
45
}
40
46
41
- __attribute__(( optnone ))
47
+ NOOPT
42
48
NonTrivialCopyAssign & operator = (const NonTrivialCopyAssign & ) {
43
49
++ copyAssignCounter ;
44
50
return * this ;
@@ -49,16 +55,16 @@ struct NonTrivialCopyAssign {
49
55
};
50
56
51
57
struct NonTrivialMoveAssign {
52
- __attribute__(( optnone ))
58
+ NOOPT
53
59
NonTrivialMoveAssign (): moveAssignCounter (0 ) {}
54
- __attribute__(( optnone ))
60
+ NOOPT
55
61
NonTrivialMoveAssign (const NonTrivialMoveAssign & ) = default ;
56
- __attribute__(( optnone ))
62
+ NOOPT
57
63
~NonTrivialMoveAssign () {
58
64
someFunc ();
59
65
}
60
66
61
- __attribute__(( optnone ))
67
+ NOOPT
62
68
NonTrivialMoveAssign & operator = (NonTrivialMoveAssign && ) {
63
69
++ moveAssignCounter ;
64
70
return * this ;
@@ -69,27 +75,27 @@ struct NonTrivialMoveAssign {
69
75
};
70
76
71
77
struct NonTrivialCopyAndCopyMoveAssign {
72
- __attribute__(( optnone ))
78
+ NOOPT
73
79
NonTrivialCopyAndCopyMoveAssign (): assignCounter (0 ) {}
74
- __attribute__(( optnone ))
80
+ NOOPT
75
81
NonTrivialCopyAndCopyMoveAssign (const NonTrivialCopyAndCopyMoveAssign & other ) : assignCounter (other .assignCounter ), instanceBalancer (other .instanceBalancer ) {
76
82
someFunc ();
77
83
}
78
- __attribute__(( optnone ))
84
+ NOOPT
79
85
NonTrivialCopyAndCopyMoveAssign ( NonTrivialCopyAndCopyMoveAssign && other ) : assignCounter (other .assignCounter ), instanceBalancer (other .instanceBalancer ) {
80
86
someFunc ();
81
87
}
82
- __attribute__(( optnone ))
88
+ NOOPT
83
89
~NonTrivialCopyAndCopyMoveAssign () {
84
90
someFunc ();
85
91
}
86
92
87
- __attribute__(( optnone ))
93
+ NOOPT
88
94
NonTrivialCopyAndCopyMoveAssign & operator = (const NonTrivialCopyAndCopyMoveAssign & ) {
89
95
++ assignCounter ;
90
96
return * this ;
91
97
}
92
- __attribute__(( optnone ))
98
+ NOOPT
93
99
NonTrivialCopyAndCopyMoveAssign & operator = (NonTrivialCopyAndCopyMoveAssign && ) {
94
100
++ assignCounter ;
95
101
return * this ;
0 commit comments