General topics | ||||||||||||||||
Flow control | ||||||||||||||||
Conditional execution statements | ||||||||||||||||
Iteration statements (loops) | ||||||||||||||||
Jump statements | ||||||||||||||||
Functions | ||||||||||||||||
Function declaration | ||||||||||||||||
Lambda function expression | ||||||||||||||||
inline specifier | ||||||||||||||||
Dynamic exception specifications(until C++17*) | ||||||||||||||||
noexcept specifier(C++11) | ||||||||||||||||
Exceptions | ||||||||||||||||
Namespaces | ||||||||||||||||
Types | ||||||||||||||||
Specifiers | ||||||||||||||||
| ||||||||||||||||
Storage duration specifiers | ||||||||||||||||
Initialization | ||||||||||||||||
Expressions | ||||||||||||||||
Alternative representations | ||||||||||||||||
Literals | ||||||||||||||||
Boolean -Integer -Floating-point | ||||||||||||||||
Character -String -nullptr(C++11) | ||||||||||||||||
User-defined(C++11) | ||||||||||||||||
Utilities | ||||||||||||||||
Attributes(C++11) | ||||||||||||||||
Types | ||||||||||||||||
typedef declaration | ||||||||||||||||
Type alias declaration(C++11) | ||||||||||||||||
Casts | ||||||||||||||||
Memory allocation | ||||||||||||||||
Classes | ||||||||||||||||
Class-specific function properties | ||||||||||||||||
| ||||||||||||||||
Special member functions | ||||||||||||||||
Templates | ||||||||||||||||
Miscellaneous | ||||||||||||||||
|
(C++23) | ||||
(C++11)(until C++26) | ||||
(C++14) | ||||
(C++17) | ||||
(C++26) | ||||
(C++20) | ||||
(C++17) | ||||
(C++17) | ||||
noreturn (C++11) | ||||
(C++20) | ||||
(TM TS) | ||||
(C++20) |
Indicates that the function does not return.
Contents |
[[noreturn]] | |||||||||
Indicates that the function will not return control flow to the calling function after it finishes (e.g. functions that terminate the application, throw exceptions, loop indefinitely, etc.). This attribute applies to the name of the function being declared in function declarations only.
If a function previously declared with[[noreturn]] is invoked and that invocation eventually returns, the behavior isruntime-undefined.
The first declaration of the function must specify this attribute if any declaration specifies it. If a function is declared with[[noreturn]] in one translation unit, and the same function is declared without[[noreturn]] in another translation unit, the program is ill-formed; no diagnostic required.
[[noreturn]]void f(){throw"error";// OK} void q[[noreturn]](int i){// behavior is undefined if called with an argument <= 0if(i>0)throw"positive";} // void h() [[noreturn]]; // error: attribute applied to function type of h, not h itself int main(){try{ f();}catch(...){}try{ q(42);}catch(...){}}
The following standard functions are declared withnoreturn
attribute:
Terminating functions | |
(C++11) | causes normal program termination without cleaning up (function)[edit] |
causes abnormal program termination (without cleaning up) (function)[edit] | |
causes normal program termination with cleaning up (function)[edit] | |
(C++11) | causes quick program termination without completely cleaning up (function)[edit] |
function called when exception handling fails (function)[edit] | |
(deprecated in C++11)(removed in C++17) | function called when dynamic exception specification is violated (function)[edit] |
Compiler hints | |
(C++23) | marks unreachable point of execution (function)[edit] |
Always-throwing functions | |
(C++11) | throws the exception from anstd::exception_ptr (function)[edit] |
throws the stored exception (public member function of std::nested_exception ) | |
(C++11) | throws its argument withstd::nested_exception mixed in (function template)[edit] |
Non-local jumps(since C++17) | |
jumps to specified location (function)[edit] |
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
CWG 2924 | C++11 | returning from a[[noreturn]] function would result in undefined behavior | results in runtime- undefined behavior |
C documentation for_Noreturn | |
C documentation for [[noreturn]] |