Почему я получаю `предупреждение: управление достигает конца не пустой функции` с помощью переключателя? - PullRequest
2 голосов
/ 17 октября 2019

Рассмотрим код, подобный следующему:

enum class Foo
{
    A, B
};

int deliverPizza(Foo foo)
{
    switch (foo) {
    case Foo::A:
        return 0;
    case Foo::B:
        return 1;
    }
}

int main()
{
    return deliverPizza(Foo::A);
}

Скомпилировано с $ g++ -o main main.cpp -Wreturn-type:

main.cpp: In function ‘int deliverPizza(Foo)’:
main.cpp:14:1: warning: control reaches end of non-void function [-Wreturn-type]

Почему это так? Насколько я вижу, все случаи обрабатываются внутри коммутатора. Неужели GCC не понимает, что дела возвращаются?

1 Ответ

4 голосов
/ 17 октября 2019

Вы все еще можете столкнуться с UB, когда создаете экземпляр enum с помощью выражения приведения.

return deliverPizza(static_cast<Foo>(42));

Это разрешено и успешно компилируется. Я полагаю, предупреждение является педантичным в отношении такого сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...