Не могу получить std :: ignore, работающий в структурированных привязках для диапазона - PullRequest
0 голосов
/ 11 октября 2019

Этот код компилируется и работает с предупреждением «неиспользуемая переменная i»:

for(auto [camera, i]: landmark->getObservations())
  camerasToCounts[camera]++;

Я хочу игнорировать i, поэтому я заменил его на std::ignore. Следующий код не компилируется:

...
#include <tuple>
...
for(auto [camera, std::ignore]: landmark->getObservations())
  camerasToCounts[camera]++;

с этой ошибкой:

error: expected ‘]’ before ‘::’ token

и этим предупреждением:

warning: unused variable ‘std’ [-Wunused-variable]

, поскольку он не распознает стандартную запись:: ignore.

Некоторый контекст:

  • Я использую C ++ 17 с gcc 7.4.0 и Eclipse CDT.
  • Проверка синтаксиса показывает то же самоеошибка компилятора. Это согласованно.
  • Та же проблема в другом для диапазона во многих файлах cpp одного и того же проекта. Это общая проблема, не ограниченная конкретной строкой.
  • Просто для проверки, эта строка компилируется нормально:

    std :: ignore = 0;

, поэтому gcc распознает std :: ignore, он не может сделать это только для диапазона.

Уже прочитали этот хороший вопрос и ответ о игнорировании в структурированных привязках.

Есть ли кто-то с подобной проблемой?

Спасибо!

1 Ответ

2 голосов
/ 11 октября 2019

Структурированные привязки объявляют переменные 1 , которые привязываются к элементам / элементам возвращаемой вещи. Это означает, что вы не можете использовать std::ignore, поскольку для одного это недопустимое имя переменной, а для двух это уже объявленное имя. Если вы хотите игнорировать результат, просто назовите член ignore и не используйте его как

for(auto [camera, ignore]: landmark->getObservations())
    camerasToCounts[camera]++;

1: фактически создается только одна переменная, в которой хранится возвращаемое значениеи затем имена в квадратных скобках фактически ссылаются на i-й член возвращаемого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...