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) | ||||
maybe_unused (C++17) | ||||
(C++17) | ||||
(C++11) | ||||
(C++20) | ||||
(TM TS) | ||||
(C++20) |
Suppresses warnings on unused entities.
Contents |
[[maybe_unused]] | |||||||||
This attribute can appear in the declaration of the following entities:
| (since C++26) |
For entities declared[[maybe_unused]], if the entities or their structured bindings are unused, the warning on unused entities issued by the compiler is suppressed.
For labels declared[[maybe_unused]], if they are unused, the warning on unused labels issued by the compiler is suppressed. | (since C++26) |
#include <cassert> [[maybe_unused]]void f([[maybe_unused]]bool thing1,[[maybe_unused]]bool thing2){[[maybe_unused]] lbl:// the label “lbl” is not used, no warning[[maybe_unused]]bool b= notfalse and nottrue;assert(b);// in release mode, assert is compiled out, and “b” is unused// no warning because it is declared [[maybe_unused]]}// parameters “thing1” and “thing2” are not used, no warning int main(){}
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
CWG 2360 | C++17 | could not apply[[maybe_unused]] to structured bindings | allowed |
C documentation formaybe_unused |