为什么我得到一个未使用的lambda捕获警告?

Tem*_*Rex 19 c++ lambda compiler-warnings clang++ c++14

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

#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
}
Run Code Online (Sandbox Code Playgroud)

对于g ++高达7.0 SVN和clang ++高达3.9.1,这一切都编译无警告.但是,对于clang ++ 5.0 SVN,我得到了

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 {
Run Code Online (Sandbox Code Playgroud)

即使它仍然打印出正确的答案.实例

问题:为什么我Wunused-lambda-capture从clang 那里得到这个新的警告?

Yak*_*ont 15

您的代码有效.

Clang的警告是无稽之谈.

将此报告为错误.