Тип C ++ 11 для различия между классом enum и обычным enum
я пишу псевдоним шаблона продвижения, похожий на boost :: promo, но для C ++ 11. Цель этого состоит в том, чтобы избежать предупреждений при получении аргументов из переменных функций. например
template
std::vector MakeArgVectorV(int aArgCount, va_list aArgList)
{
std::vector args;
while (aArgCount > 0)
{
args.push_back(static_cast(va_arg(aArgList, Promote)));
--aArgCount;
}
return args;
}
Псевдоним шаблона Promote продвигает тип, следующий за выдвижением аргументов по умолчанию для аргументов с переменными параметрами: 1) Целое число, котороеs меньше чем int переводится в int 2) float удваивается
Моя проблема в том, что стандартное перечисление C ++ может быть продвинуто, но класс перечисления C ++ 11 не продвигается (компилятор не генерирует предупреждение). Я хочу, чтобы Promote работал с обычным перечислением, но игнорирую класс перечисления C ++ 11.
Как я могу определить разницу между классом enum и enum в псевдониме шаблона Promote?