Macro de contador de preprocesador

¿Hay alguna manera de crear unCOUNTER() macro (que sigue el estándar C ++ 11/14) que se expande a un número que aumenta en uno cada vezCOUNTER() se invoca?

Lo he pensado, pero no pude encontrar una manera de hacerlo funcionar. No encontré una manera de almacenar "estado" en elCOUNTER() macro.

Ejemplo:

#define COUNTER() <...> // Implementation goes here...
#define UNIQUE_NAME_1() TEST ## COUNTER()
#define UNIQUE_NAME_2() TEST ## COUNTER()

// Note how the COUNTER() macro can be used with other macros
// (it cannot be implemented with C++ code)

int main() {
    std::cout << STRINGIFY(UNIQUE_NAME_1()) << std::endl;
    std::cout << STRINGIFY(UNIQUE_NAME_2()) << std::endl;
}

Rendimiento esperado:

TEST0 
TEST1    

Respuestas a la pregunta(1)

Su respuesta a la pregunta