C++ 为什么我会收到未使用的lambda捕获警告?

C++ 为什么我会收到未使用的lambda捕获警告?,c++,lambda,c++14,compiler-warnings,clang++,C++,Lambda,C++14,Compiler Warnings,Clang++,我正在传递一个lambda和一个init捕获的循环计数器,如下所示: #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);

我正在传递一个lambda和一个init捕获的循环计数器,如下所示:

#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
}
即使它仍然打印出正确的答案

问题:为什么我会收到来自clang的新的
Wunused lambda捕获
警告

您的代码是有效的

叮当的警告是胡说八道


将此报告为bug。

哦,哇,这应该编译吗<在捕获之前,未在任何位置定义代码>i。有趣。@DeiDei是的,这应该给闭包对象一个成员变量
i
,初始化为2.Bug。编辑:胡乱猜测肯定是错的。
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 {