Desde que percebi, há muitos anos, que isso não produz um erro por padrão (pelo menos no GCC), sempre me perguntei por que?
Entendo que você pode emitir sinalizadores de compilador para gerar um aviso, mas isso não deveria sempre ser um erro? Por que faz sentido que uma função não nula não retorne um valor para ser válida?
Um exemplo conforme solicitado nos comentários:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
... compila.
-Werror=return-type
tratará exatamente esse aviso como um erro. Eu apenas ignorei o aviso e os dois minutos de frustração ao localizar um this
ponteiro inválido me levaram até aqui e a esta conclusão.
std::optional
função sem retornar retorna uma opção "verdadeira"