Construcción C ++ que se comporta como la macro __COUNTER__ [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿C ++ admite contadores de tiempo de compilación? 7 respuestas

Tengo un conjunto de clases de C ++ y cada una debe declarar una identificación secuencial única como una constante de tiempo de compilación. Para eso estoy usando el__COUNTER__ macro incorporada que se traduce en un número entero que se incrementa para cada aparición del mismo. Los identificadores no necesitan seguir un orden estricto. El único requisito es que sean secuenciales y comiencen desde 0:

class A {
public:
    enum { id = __COUNTER__ };
};

class B {
public:
    enum { id = __COUNTER__ };
};

// etcetera ...

Mi pregunta es: ¿hay alguna manera de lograr el mismo resultado utilizando una construcción C ++, como plantillas?

Respuestas a la pregunta(4)

Su respuesta a la pregunta