#include #define CREATE_SAME_4X1(x) x,x,x,x #define CREATE_SAME_4X2(x) CREATE_SAME_4X1(x),CREATE_SAME_4X1(x),CREATE_SAME_4X1(x),CREATE_SAME_4X1(x) #define CREATE_SAME_4X3(x) CREATE_SAME_4X2(x),CREATE_SAME_4X2(x),CREATE_SAME_4X2(x),CREATE_SAME_4X2(x) #define CREATE_SAME_4X4(x) CREATE_SAME_4X3(x),CREATE_SAME_4X3(x),CREATE_SAME_4X3(x),CREATE_SAME_4X3(x) #define CREATE_SAME_4X5(x) CREATE_SAME_4X4(x),CREATE_SAME_4X4(x),CREATE_SAME_4X4(x),CREATE_SAME_4X4(x) template struct Counter; template <> struct Counter<> { static const size_t count = 0; }; template struct Counter { #pragma message "Instantiation" static const size_t count = 1 + Counter::count; }; int main() { const size_t count = Counter::count; std::cout << "Params count: " << count << std::endl; return 0; }