Creación de una lista de tiempo de compilación incremental en C ++

En C ++, ¿hay alguna manera de construir una lista de tiempo de compilación incremental, en el siguiente patrón?

START_LIST(List)
ADD_TO_LIST(List, int)
ADD_TO_LIST(List, float)
ADD_TO_LIST(List, double)
END_LIST(List)

El resultado de esto debería ser equivalente a:

using List = Cons<int, Cons<float, Cons<double, Nil>>>;

También tengo una restricción de que el espacio entre las macros debe estar en cualquier alcance que sea todo. Estoy planeando definir cosas y registrarlas en la lista al mismo tiempo usando una macro, algo como esto:

#define DEFINE_ELEMENT(Name, Value) \
using Name = SomeTemplate<Value>; \
ADD_TO_LIST(ListOfElements, Name)

En otras palabras, no está permitido definirSTART_LIST a algo comoSomeTemplate< odecltype(. Eso haría imposible agregar nuevas definiciones en el medio.

Tenga en cuenta que la solución puede ser alternativamente en forma de una lista de "paquete de parámetros" (plantilla variadic). Solo me importa que siga el patrón de definición incremental como se muestra arriba.

¿Podrían usarse especializaciones aquí? Si no es posible exactamente con el patrón anterior, ¿es posible con un poco más repetitivo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta