Tenho um código que simplifiquei para isto:
#include <iostream>
#include <string>
enum En
{
one,
two,
three
};
auto get_str(int n, En en)
{
if (n > 0)
{
return std::to_string(n);
}
switch (en)
{
case one:
return std::string("one");
case two:
return std::string("two");
case three:
return std::string("three");
}
}
int main()
{
auto str = get_str(3, two);
std::cout << str << '\n';
}
Veja no explorador do compilador .
Quando compilo com GCC 14.2 ou 13.3.0 (com ou sem -Wall -Wextra
), ele reclama da get_str
função:
warning: control reaches end of non-void function [-Wreturn-type]
.
O Clang 15.0 e superior -Wall -Wextra
não emite nenhum aviso. O VS17.10 também reclama: warning C4715: 'get_str': not all control paths return a value
.
O que faz com que Clang discorde? Qual é o caminho que ignora return
s?