Я пишу псевдоним шаблона продвижения, похожий на boost:: promotion, но для С++ 11. Цель этого - избегать предупреждений при извлечении аргументов из функций varidic. например.
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) Поплавок продвигается до двойного
Моя проблема в том, что стандартное перечисление С++ может быть продвинуто, но класс enum С++ 11 не продвигается (компилятор не генерирует предупреждение). Я хочу, чтобы Promote работал с регулярным перечислением, но игнорировал класс перечисления С++ 11.
Как я могу рассказать о различии между классом enum и перечислением в моем псевдониме шаблона Promote?