パターンマッチング(時には?)を持つ機能言語ではバインドされた値を無視する可能性がありますが、C++の構造化バインディングではこれを行う方法がないようです(std::ignore with structured bindings?)。アドバイスはダミーの名前を使用することですが、未使用の変数についての警告が表示されます。打ち鳴らすとgccの両方の最新のヘッドを[[maybe_unused]]と構造化バインド
、これは私も期待しているだろう素晴らしいと便利です予想されること、
[[maybe_unused]] auto x =4 ; // fine, no warning
[[maybe_unused]] auto [a,dummyb,dummyc] = std::tuple<int,int,float>(1,1,1.0f);
が、これはうまくいくん:
auto [g,[[maybe_unused]]dummyh,[[maybe_unused]]dymmyi] =
std::tuple<int,int,float>(1,1,1.0f);
具体的な理由はありますかattributesここでは使用できませんか? (標準的にも技術的にも)。 gccもclangもこれを受け入れません。
編集、サポート状況の収集:(ありがとうgodbolt/compiler explorer)。それはで期待どおりに動作します(以前にも可能性があり):(specsに従ってテストされていない、)
- のgcc 8.0トランク(G ++ 8.0.0 20171015実験)
- 打ち鳴らす4.0.0
- ICC 18
MSVC 17.3.5(およびVisual Studio GUI)のでは、属性はですが、構造化バインドでは機能しません。構造バインディングの論文でbug report
潜在的にネストされた分解をブロックすることが懸念されていたと思います。 –
Hmm。私はそれについてもっと考えると、その単一の属性を外側に置くことでもう少しうまくいく:-) –
問題はあなたです外に出ればどんな変数が使われていなかったのか知りません – serine