
Goran Mitrovic wrote:
I've got a question.
Is a compile-time variables concept known?
Yes, but AFAIK it can't be done in standard C++. I guess you mean something along the lines of this hack, which takes advantage of a common compiler bug which will incorrectly find the check() and value() overloads.. Works on gcc and maybe something else, but it's not portable. template<int N> struct counter : counter<N - 1> {}; template<> struct counter<0> {}; template<int N> struct size_type { typedef char(&type)[N + 1]; }; size_type<0>::type check(...); template<class T, int N> struct set_variable { typedef counter<10> start_type; enum { current = sizeof(check((T*)0, (start_type*)0)) - 1, next = current + 1 }; friend typename size_type<next>::type check(T*, counter<next>*) {} friend typename size_type<N>::type value(T*, counter<current>*) {} }; #define CURRENT(T) (sizeof(check((T*)0, (counter<10>*)0)) - 1) #define VALUE(T) (sizeof(value((T*)0, (counter<10>*)0)) - 1) #define SET(T, N) set_variable<T, N>() #include <iostream> struct X {}; int main() { SET(X, 10); std::cout << CURRENT(X) << "\n"; std::cout << VALUE(X) << "\n"; SET(X, 15); std::cout << CURRENT(X) << "\n"; std::cout << VALUE(X) << "\n"; SET(X, 20); std::cout << CURRENT(X) << "\n"; std::cout << VALUE(X) << "\n"; } -- Daniel Wallin