Rasgo de tipo C ++ 11 para diferenciar entre clase de enumeración y enumeración regular
Estoy escribiendo un alias de plantilla de promoción similar a boost :: promot pero para C ++ 11. El propósito de esto es evitar advertencias cuando se recuperan argumentos de funciones varidic. p.ej.
template <typename T>
std::vector<T> MakeArgVectorV(int aArgCount, va_list aArgList)
{
std::vector<T> args;
while (aArgCount > 0)
{
args.push_back(static_cast<T>(va_arg(aArgList, Promote<T>)));
--aArgCount;
}
return args;
}
El alias de la plantilla Promover promueve el tipo que sigue a la promoción de argumentos predeterminada para los argumentos variadic: 1) Un entero que es más pequeño que un int se promueve a int 2) Un flotador se promueve a doble
Mi problema es que se puede promover una enumeración estándar de C ++ pero no se promueve una clase de enumeración de C ++ 11 (el compilador no genera una advertencia). Quiero Promover para trabajar con una enumeración regular pero ignorar una clase de enumeración de C ++ 11.
¿Cómo puedo saber la diferencia entre una clase de enumeración y una enumeración en el alias de mi plantilla de promoción?