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?

questionAnswers(1)

yourAnswerToTheQuestion