无法让 std::ignore 在范围内的结构化绑定中工作

Can't get std::ignore working in structured bindings in for range

此代码可以编译并运行,但带有 'unused variable 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]

因为不识别std::ignore。

一些上下文:

所以 gcc 识别 std::ignore,它只是在范围内识别失败。

已阅读 关于在结构化绑定中忽略的内容。

有人遇到类似问题吗?

谢谢!

结构化绑定声明变量1,绑定到被return编辑的对象的members/elements。这意味着您不能使用 std::ignore,因为一方面它不是有效的变量名,另一方面它是一个已经声明的名称。如果您想忽略结果,只需将成员命名为 ignore 而不要像

那样使用它
for(auto [camera, ignore]: landmark->getObservations())
    camerasToCounts[camera]++;

1:它实际上只创建了一个存储 return 值的变量,然后方括号中的名称实际上引用了 returned 对象的第 i 个成员。