language: C++ 4.7.2 (gcc-4.7.2)
date: 323 days 20 hours ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
    template<unsigned int n> struct Count { bool data[n]; };
    template<int n> struct Counter : public Counter<n-1> {};
    template<> struct Counter<0> {};
    Count<1> GetCount(Counter<1>);
    
    #define MAX_COUNTER_NUM 64
    #define COUNTER_VALUE (sizeof(GetCount(Counter<MAX_COUNTER_NUM + 1>())) / sizeof(bool))
    #define INC_COUNTER Count<COUNTER_VALUE + 1> GetCount(Counter<COUNTER_VALUE + 1>);
 
int main()
{
        std::cout << "counter = " << COUNTER_VALUE << "\n";
        INC_COUNTER
        std::cout << "counter = " << COUNTER_VALUE << "\n";
        INC_COUNTER
        std::cout << "counter = " << COUNTER_VALUE << "\n";
        INC_COUNTER
        std::cout << "counter = " << COUNTER_VALUE << "\n";
        INC_COUNTER
        std::cout << "counter = " << COUNTER_VALUE << "\n";
        INC_COUNTER
        std::cout << "counter = " << COUNTER_VALUE << "\n";
}