Característica de tipo C ++ 11 para diferenciar entre classe enum e enum regular

Estou escrevendo um alias de modelo de promoção semelhante ao boost :: promote, mas para o C ++ 11. O objetivo deste é evitar avisos ao recuperar argumentos de funções varidic. por exemplo.

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;
}

O alias de gabarito Promover promove o tipo seguindo a promoção de argumento padrão para argumentos variádicos: 1) Um inteiro menor que um int é promovido para int 2) Um float é promovido para double

Meu problema é que uma enum C ++ padrão pode ser promovida, mas uma classe enum C ++ 11 não é promovida (o compilador não gera um aviso). Eu quero promover para trabalhar com um enum regular, mas ignorar uma classe enum C ++ 11.

Como posso saber a diferença entre uma classe de enum e um enum no meu alias de modelo de promoção?

questionAnswers(1)

yourAnswerToTheQuestion