#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";
}
