Freestanding and hosted implementations
There are two kinds of implementations defined by the C++ standard: hosted and freestanding implementations. For hosted implementations the set of standard library headers required by the C++ standard is much larger than for freestanding ones. In a freestanding implementation execution may happen without an operating system.
freestanding | hosted |
Under a freestanding implementation, it is implementation-defined whether a program can have more than one thread of execution. | Under a hosted implementation, a C++ program can have more than one thread running concurrently. |
| (since C++11) |
Requirements on the main
function
freestanding | hosted |
In a freestanding implementation, it is implementation-defined whether a program is required to define a main function. Start-up and termination is implementation-defined; start-up contains the execution of constructors for objects of namespace scope with static storage duration; termination contains the execution of destructors for objects with static storage duration. | In a hosted implementation, a program must contain a global function called main . Executing a program starts a main thread of execution in which the main function is invoked, and in which variables of static storage duration might be initialized and destroyed. |
A freestanding implementation has an implementation-defined set of headers. This set includes at least the headers in the following table:
- The supplied version of the header
<cstdlib>
shall declare at least the functions std::abort
, std::atexit
, std::exit
, std::at_quick_exit
and std::quick_exit
(since C++11).
References
- C++17 standard (ISO/IEC 14882:2017):
- 4.1 Implementation compliance (p: 5)
- 4.7 Multi-threaded executions and data races (p: 15)
- 6.6.1 Main function (p: 66)
- 20.5.1.3 Freestanding implementations (p: 458)
- C++14 standard (ISO/IEC 14882:2014):
- 1.4 Implementation compliance (p: 5)
- 1.10 Multi-threaded executions and data races (p: 11)
- 3.6.1 Main function (p: 62)
- 17.6.1.3 Freestanding implementations (p: 441)
- C++11 standard (ISO/IEC 14882:2011):
- 1.4 Implementation compliance (p: 5)
- 1.10 Multi-threaded executions and data races (p: 11)
- 3.6.1 Main function (p: 58)
- 17.6.1.3 Freestanding implementations (p: 408)
- C++03 standard (ISO/IEC 14882:2003):
- 1.4 Implementation compliance (p: 3)
- 3.6.1 Main function (p: 43)
- 17.4.1.3 Freestanding implementations (p: 326)
See also