簡體   English   中英

為什么我得到一個未使用的lambda捕獲警告?

[英]Why am I getting an unused lambda capture warning?

我正在傳遞一個帶有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
}

對於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 { 

即使它仍然打印出正確的答案。 實例

問題 :為什么我從clang那里得到這個新的Wunused-lambda-capture警告?

您的代碼有效。

Clang的警告是無稽之談。

將此報告為錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM