#include <iostream>
#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<typename... Args> struct Counter;
template <>
struct Counter<> {
static const size_t count = 0;
};
template <typename T, typename... Args>
struct Counter<T, Args...> {
#pragma message "Instantiation"
static const size_t count = 1 + Counter<Args...>::count;
};
int main() {
const size_t count = Counter<CREATE_SAME_4X5( float )>::count;
std::cout << "Params count: " << count << std::endl;
return 0;
}
Comments
0 B
|👍
/👎