为了解决未使用的变量警告,我有时会遇到使用以下虚拟lambda捕获(而不是例如C ++ 17中的(void)x;
,... foo(int /* x */)
或... foo([[maybe_unused]] int x)
的代码:
void foo(int x)
{
[&x]{}();
}
现在,这并不是真正的补救方法,因为它会将警告从当前范围传递到lambda捕获,但是afaik,GCC并没有诊断程序对此进行标记,例如叮当声(as of 5.0)发出unused-lambda-capture
警告,如果已激活。
$ clang++ -xc++ -std=c++11 -Wunused-lambda-capture - <<< "int main() { int x; [&x]{}(); }"
<stdin>:1:23: warning: lambda capture 'x' is not used [-Wunused-lambda-capture]
int main() { int x; [&x]{}(); }
^
1 warning generated.
在海湾合作委员会项目中,如果可能的话,我可以在不诉诸Clang的情况下捕获上述构造。
GCC目前确实没有等效的功能吗?
确实是这种情况,非常古老但仍未解决的错误报告所涉及:
如果不是,那是当前计划要实现/当前正在实现的功能吗?
基于此错误报告上没有采取任何措施(2012年报告[[已确认,此后似乎没有发生太多事情,因此,不久以后将不会添加此内容。