Вызывая std::terminate()
из кода, скомпилированного с отключенными исключениями, я заметил, что поведение отличается для gcc и msvc. В первом случае программа была прервана, как я и ожидал, тогда как во втором случае ничего не произошло (программа продолжила выполнение).
Как оказалось, msvc имеет фиктивную реализацию для функции завершения, когда макрос _HAS_EXCEPTIONS не установлен:
inline void __CRTDECL terminate() _NOEXCEPT
{ // handle exception termination
}
Visual Studio 2017, версия 15.7.2
cppreference говорит:
std :: terminate () также может быть вызван непосредственно из программы.
Не означает ли это, что прерывание / обработчик должен вызываться в любом случае, независимо от способности исключений?