При компиляции Проект C ++ выдает ошибку C2228, которая не ожидается, так как элемент управления не достигает точки во время выполнения - PullRequest
0 голосов
/ 09 октября 2018

Базовый класс Содержит открытую панель функций ().foo () - это универсальная функция, которая принимает один параметр. Когда я передаю Object производного класса, он работает нормально, но когда я передаю встроенный тип данных, он должен выдавать исключение, но он показывает ошибку времени компиляции C2228 В Visual Studio.

class Base
{
    public:
        void Bar();
};

class Derived:Base
{};

template<typename T>
void foo(T object)
{
    if(std::is_base_of<Base,T>::value == true)
        object.Bar();//Control does not reaches the point
    else
        throw "Invalid Parameter";
}
int main()
{
    Derived objDerived;
    foo(objDerived); //WORKS GOOD
    foo(2);//ERROR C2228
}

1 Ответ

0 голосов
/ 09 октября 2018

То, что вы хотите, это c ++ 17 if constexpr.В противном случае вы попытаетесь создать ветку, которая приводит к ошибке.Это доступно в vs2017.

В c ++ 11 вам нужны две функции, а не одна, и вместо этого используйте enable_if.

...