Пропуск полей в объявлении structured bindings

Sergey K
Sergey K

С++17 позволяет разобрать массив, кортеж или структуру на именованные элементы вот таким образом:

auto foo(int x, int y)
{
    // ...whatever...
    return std::make_tuple(/*четыре элемента*/);
}

auto [a, b, c, d] = foo(2, 3);

А что если b никогда не будет использоваться? Было бы полезно пропустить одно или несколько полей в structured binding declaration, например так:

auto [a, _, c, d] = foo(2, 3);

или так:

auto [a, void, c, d] = foo(2, 3);

Оба этих примера несовершенны. В первом случае _ является валидным идентификатором и не подходит на роль плейсхолдера для игнорирования значения. Во втором же случае название типа стоит на месте идентификатора, что выглядит неоднородно и может вызвать замешательство при первых ознакомлениях с таким синтаксисом.

Возникает несколько вопросов:
1) Нужна ли вообще такая функциональность?
2) Если нужна, то каким должен быть синтаксис? Уместен ли вариант с void? Ваши предложения?

 

2
рейтинг
1 комментарий
Antervis
для этого (как и в случае с std::tie) можно использовать std::ignore
Antervis
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).