Fun with macros (don't try this at home, kids):
#include <iostream> template <int i = 0, int j = 1, int k = 2> void blah() { std::cout << i << " " << j << " " << k << std::endl; } #define _blah(D, V) (*#V ? V + 0 : D) #define blah_3(I,J,K) blah<_blah(0,I), _blah(1,J), _blah(2,K)>() #define blah_2(I,J) blah_3(I,J,) #define blah_1(I) blah_3(I,,) #define blah__(_1,_2,_3,X,...) blah ## X #define blah(...) blah__(__VA_ARGS__,_3,_2,_1)(__VA_ARGS__) int main() { blah(); blah(, ,); blah(1); blah(1,,); blah(1, ,3); return 0; }
source share