Тип C ++ 11 для различия между классом enum и обычным enum

Я пишу псевдоним шаблона продвижения, похожий на boost :: promo, но для C ++ 11. Цель этого состоит в том, чтобы избежать предупреждений при получении аргументов из переменных функций. например

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

Псевдоним шаблона Promote продвигает тип, следующий за выдвижением аргументов по умолчанию для аргументов с переменным числом аргументов: 1) Целое число, меньшее, чем int, повышается до int 2) Float повышается до двойного

Моя проблема в том, что стандартное перечисление C ++ может быть продвинуто, но класс перечисления C ++ 11 не продвигается (компилятор не генерирует предупреждение). Я хочу, чтобы Promote работал с обычным перечислением, но игнорирую класс перечисления C ++ 11.

Как я могу определить разницу между классом enum и enum в псевдониме шаблона Promote?

Ответы на вопрос(1)

Ваш ответ на вопрос