A GraphViz diagram that shows both normal and unexpected program termination flows in C++.
There are multiple ways a C++ program may terminate. These include both normal and unexpected termination. This GraphViz diagram shows the program termination flows as defined by the standard.
Standard C++ program terminators include:
std::exit()
std::quick_exit()
std::_Exit()
std::abort()
std::terminate()
std::unexpected()
(removed in C++17)
For completeness, Microsoft-specific terminators:
For completeness, POSIX-specific terminators:
Read more on the associated blog post here.
Most of the functions have subtle contexts, conditions and effects that should be considered by checking their documentation.
The diagram does not make an explicit distinction between the C and C++ versions of some of the functions (e.g. exit()
).
The orange path shows normal program termination.
Corrections, additions, updates and layout improvements will be gladly accepted.