内を抑圧未使用の警告:構造化バインディングと範囲ベースのため。私は、キーを無視して、構造のバインディングを使用してマップをトラバースしたいgccの
for (auto& [unused, val] : my_map)
do_something(val);
私はGCC-7.2.0と異なるオプションを試してみました:
// The warning is issued
for ([[maybe_unused]] auto& [unused, val] : my_map)
do_something(val);
// Syntax error
for (auto& [[[maybe_unused]] unused, val] : my_map)
do_something(val);
// The same two combinations above with [[gnu::unused]].
それはと思われます構造体バインディングの場合、[[maybe_unused]]
属性はまだ実装されていません。
これには簡単な解決策はありますか?マクロ、gcc/gnu拡張子、または特定の警告を一時的に抑制する任意のプラグマは私にとっては問題ありません。私はこれを使用している関数がかなり短いので(これは基本的に正確な振る舞いを持つ2つの異なるマップに対して2つのrange-for-loopsであるため)、range-based-forを使用している関数本体全体で無効にします)。私はプロジェクトをコンパイルするために使用してい
(関連する)オプションは次のとおりです。
私は上に行くために現在持っているが、それは醜い何:
for (auto& [unused, val] : my_map)
(void)unused, do_something(val);
関連:[構造化バインディングでのstd :: ignore](https://stackoverflow.com/questions/40673080/stdignore-with-structured-bindings) – dfri
@dfriしかし、 'std :: ignore'は既に宣言されている変数なので使用できません。私が持っているのは宣言なので、新しい名前を導入しています。 –
はい私は、リンクに説明されているように、関連するリンクだけを投稿しました(標準では後で紹介するかもしれませんが、構造化されたバインディングのための 'std :: ignore'は現在のところありません)。リンクされたスレッドの回答の1つにコメントすると、警告抑制(バインディング内のすべての宣言をカバーする)に 'maybe_unused'を使用することが推奨されていますが、サポートされているかどうかはわかりません。範囲ベースのループ内の構造化バインディングのコンテキスト。 – dfri