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) | ||||
fallthrough (C++17) | ||||
(C++26) | ||||
(C++20) | ||||
(C++17) | ||||
(C++17) | ||||
(C++11) | ||||
(C++20) | ||||
(TM TS) | ||||
(C++20) |
Indicates that the fall through from the previous case label is intentional and should not be diagnosed by a compiler that warns on fallthrough.
Contents |
[[fallthrough]] | |||||||||
May only be applied to anull statement to create afallthrough statement ([[fallthrough]];).
A fallthrough statement may only be used in aswitch statement, where the next statement to be executed is a statement with a case or default label for that switch statement. If the fallthrough statement is inside a loop, the next (labeled) statement must be part of the same iteration of that loop.
void f(int n){void g(), h(), i(); switch(n){case1:case2: g();[[fallthrough]];case3:// no warning on fallthrough h();case4:// compiler may warn on fallthroughif(n<3){ i();[[fallthrough]];// OK}else{return;}case5:while(false){[[fallthrough]];// ill-formed: next statement is not// part of the same iteration}case6:[[fallthrough]];// ill-formed, no subsequent case or default label}}
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
CWG 2406 | C++17 | [[fallthrough]] could appear in a loop nested inside the target switch statement | prohibited |
C documentation forfallthrough |