С тех пор, как я понял много лет назад, что это не приводит к ошибке по умолчанию (по крайней мере, в GCC), я всегда задавался вопросом, почему?
Я понимаю, что вы можете использовать флаги компилятора для выдачи предупреждения, но не должно ли это быть ошибкой? Почему имеет смысл, чтобы не пустая функция не возвращала значение, чтобы быть действительным?
Пример в соответствии с просьбой в комментариях:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
... компилирует.
-Werror=return-type
будет рассматривать только это предупреждение как ошибку. Я просто проигнорировал предупреждение, и пара минут разочарования, выслеживающих неверный this
указатель, привели меня сюда и к такому выводу.
std::optional
функции без возврата возвращает «истинное» необязательное значение