1 #ifndef FUNCTION_TYPES_H
2 #define FUNCTION_TYPES_H
3 
4 
5 class FunctionObject
6 {
7     int data_[10]; // dummy variable to prevent small object optimization in
8                    // std::function
9 public:
10     static int count;
11 
FunctionObject()12     FunctionObject() {
13         ++count;
14         for (int i = 0; i < 10; ++i) data_[i] = i;
15     }
16 
FunctionObject(const FunctionObject &)17     FunctionObject(const FunctionObject&) {++count;}
~FunctionObject()18     ~FunctionObject() {--count; ((void)data_); }
19 
operator()20     int operator()() const { return 42; }
operator()21     int operator()(int i) const { return i; }
operator()22     int operator()(int i, int) const { return i; }
operator()23     int operator()(int i, int, int) const { return i; }
24 };
25 
26 int FunctionObject::count = 0;
27 
28 class MemFunClass
29 {
30     int data_[10]; // dummy variable to prevent small object optimization in
31                    // std::function
32 public:
33     static int count;
34 
MemFunClass()35     MemFunClass() {
36         ++count;
37         for (int i = 0; i < 10; ++i) data_[i] = 0;
38     }
39 
MemFunClass(const MemFunClass &)40     MemFunClass(const MemFunClass&) {++count; ((void)data_); }
41 
~MemFunClass()42     ~MemFunClass() {--count;}
43 
foo()44     int foo() const { return 42; }
foo(int i)45     int foo(int i) const { return i; }
foo(int i,int)46     int foo(int i, int) const { return i; }
foo(int i,int,int)47     int foo(int i, int, int) const { return i; }
48 };
49 
50 int MemFunClass::count = 0;
51 
FreeFunction()52 int FreeFunction() { return 42; }
FreeFunction(int i)53 int FreeFunction(int i) {return i;}
FreeFunction(int i,int)54 int FreeFunction(int i, int) { return i; }
FreeFunction(int i,int,int)55 int FreeFunction(int i, int, int) { return i; }
56 
57 #endif // FUNCTION_TYPES_H
58