c++ - installed - ¿Por qué recibo una advertencia de captura lambda no utilizada?
llvm 3.7 0 (1)
Estoy pasando un lambda con un contador de bucle capturado por init como este:
#include <iostream>
auto sq(int c, int x) { return c * x * x; }
struct S {
template<class Fun>
void for_each(Fun fun) const {
for (auto i = 1; i < 4; ++i) {
fun(i);
}
}
};
int main()
{
S s;
auto sum = 0;
s.for_each([&, i = 2](auto c) mutable {
sum += sq(c, i++);
});
std::cout << sum; // 70 = 1 * 4 + 2 * 9 + 3 * 16
}
Para g ++ hasta 7.0 SVN y para clang ++ hasta 3.9.1, todo esto se compila sin advertencias. Sin embargo, para clang ++ 5.0 SVN, obtengo
prog.cc:18:20: warning: lambda capture ''i'' is not required to be captured for this use [-Wunused-lambda-capture] s.for_each([&, i = 2](auto c) mutable {
A pesar de que todavía imprime la respuesta correcta. Ejemplo vivo
Pregunta : ¿por qué recibo esta nueva Wunused-lambda-capture
de clang?
Su código es válido.
La advertencia de Clang es una tontería.
Reportar esto como un error.