This is accomplished by these two sections in the C++ language specification:
[basic.start.main]
A return statement in
main
has the effect of leaving the main function and callingexit
with the return value as the argument.
and
[lib.support.start.term]
The function
exit
has additional behavior in this International Standard:
- …
- Next, all open C streams with unwritten buffered data are flushed.
- …