Функциональные языки с сопоставлением с образцом (иногда?) Имеют возможность игнорировать некоторые связанные значения, но в структурированных привязках С++ 17, похоже, нет способа сделать это (std :: ignore со структурированными привязками?). Рекомендуется использовать фиктивное имя, но тогда мы получим предупреждения о неиспользуемых переменных.
С последними головами clang и gcc это делает ожидаемую вещь, которая хороша и полезна,
[[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);
Есть ли конкретные причины, атрибуты не могут быть использованы здесь? (как в стандарте, так и технически). Ни gcc, ни clang не принимают это.
Редактировать, собирая статус поддержки: (спасибо Godbolt/Исследователь компилятора). Это работает как ожидалось в (может быть и раньше):
- ствол gcc 8.0 (g++ 8.0.0 20171015 экспериментальный)
- лязг 4.0.0
- ICC 18 (не проверено, в соответствии со спецификациями)
MSVC 17.3.5 (и графический интерфейс Visual Studio) разрешает атрибут, но он не работает со структурированными привязками. сообщение об ошибке