Cecha typu C ++ 11, aby odróżnić klasę enum od zwykłego enum
Piszę alias szablonu promocji podobny do boost :: promot, ale dla C ++ 11. Celem tego jest uniknięcie ostrzeżeń podczas pobierania argumentów z funkcji zmiennych. na przykład
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;
}
Alias szablonu Promuj promuje typ następujący po domyślnej promocji argumentów dla argumentów variadic: 1) Liczba całkowita, która jest mniejsza niż int, jest promowana do int 2) Wartość zmiennoprzecinkowa jest promowana do podwojenia
Moim problemem jest to, że standardowe enum C ++ może być promowane, ale klasa enum C ++ 11 nie jest promowana (kompilator nie generuje ostrzeżenia). Chcę, aby Promowanie działało z regularnym wyliczeniem, ale ignoruje klasę enum C ++ 11.
Jak mogę odróżnić klasę wyliczeniową od wyliczenia w aliasie szablonu Promote?