c – 为什么我得到一个未使用的lambda捕获警告? - 代码日志

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

我正在使用一个初始化捕获的循环计数器传递一个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
}

对于高达7.0 SVN和克隆高达3.9.1,这一切都编译为无警告。但是,对于clang 5.0 SVN,我得到

06001

即使它仍然打印出正确的答案。 Live Example

问题:为什么要从cl I得到这个新的Wunused-lambda捕获警告?

您的代码有效。

ang ang的警告是废话。

报告为错误。

http://stackoverflow.com/questions/41960347/why-am-i-getting-an-unused-lambda-capture-warning

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 为什么我得到一个未使用的lambda捕获警告?