C++ attribute: maybe_unused (since C++17)
From cppreference.net
<
cpp
|
language
|
attributes
未使用エンティティに関する警告を抑制します。
目次 |
構文
[
[
maybe_unused
]
]
|
|||||||||
説明
この属性は以下のエンティティの宣言に現れることがあります:
- class : struct [ [ maybe_unused ] ] S ;
- typedef ( エイリアス宣言 によって宣言されたものを含む): [ [ maybe_unused ] ] typedef S * PS ; 、 using PS [ [ maybe_unused ] ] = S * ;
- 変数( 静的データメンバ を含む): [ [ maybe_unused ] ] int x ;
- 非静的データメンバ : union U { [ [ maybe_unused ] ] int n ; } ; 、
- 関数 : [ [ maybe_unused ] ] void f ( ) ;
- 列挙型 : enum [ [ maybe_unused ] ] E { } ;
- 列挙子: enum { A [ [ maybe_unused ] ] , B [ [ maybe_unused ] ] = 42 } ;
- 構造化束縛 : [ [ maybe_unused ] ] auto [ a, b ] = std:: make_pair ( 42 , 0.23 ) ;
|
(C++26以降) |
[ [ maybe_unused ] ] で宣言されたエンティティについて、そのエンティティまたはその構造化バインディングが使用されない場合、コンパイラによって発行される未使用エンティティに関する警告は抑制されます。
|
[ [ maybe_unused ] ] で宣言されたラベルは、使用されていない場合でも、コンパイラによって発行される未使用ラベルに関する警告が抑制されます。 |
(C++26以降) |
例
このコードを実行
#include <cassert> [[maybe_unused]] void f([[maybe_unused]] bool thing1, [[maybe_unused]] bool thing2) { [[maybe_unused]] lbl: // ラベル「lbl」は使用されていないため警告なし [[maybe_unused]] bool b = not false and not true; assert(b); // リリースモードではassertはコンパイルされず、「b」は未使用となる // [[maybe_unused]]で宣言されているため警告なし } // パラメータ「thing1」と「thing2」は使用されていないが警告なし int main() {}
不具合報告
以下の動作変更欠陥報告書は、以前に公開されたC++標準に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| CWG 2360 | C++17 | [ [ maybe_unused ] ] を構造化バインディングに適用できなかった | 許可される |
参考文献
- C++23規格 (ISO/IEC 14882:2024):
-
- 9.12.8 未使用可能性属性 [dcl.attr.unused]
- C++20規格 (ISO/IEC 14882:2020):
-
- 9.12.7 未使用可能性属性 [dcl.attr.unused]
- C++17規格 (ISO/IEC 14882:2017):
-
- 10.6.6 未使用可能性属性 [dcl.attr.unused]
関連項目
|
C ドキュメント
について
maybe_unused
|