Между делом придумался вот компайл-тайм счетчик. При всей простоте допускает одновременное использование нескольких независимых счетчиков. Также позволяет настраивать точку отчсета и шаг.
http://ideone.com/gmtlyE
template <int ORIGIN = 0, int INCREMENT = 1>
struct CTCOrigin : std::integral_constant<int, ORIGIN>
{
static constexpr int increment = INCREMENT;
};
#define CREATE_CTC(name, ...) \
template <size_t N> struct name : name<N - 1> { }; \
template <> struct name<__LINE__> : CTCOrigin<__VA_ARGS__> { };
#define UPDATE_CTC(name) \
template <> struct name<__LINE__> : name<__LINE__ - 1> \
{ \
static constexpr int value = name<__LINE__ - 1>::value + increment; \
};
#define GET_CTC(name) \
name<__LINE__>::value