Почему я получаю предупреждение о незащищенном лямбда-захвате?

Я прохожу лямбда с помощью счетчика цикла с init-capture следующим образом:

#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 {

хотя он все еще печатает правильный ответ. Пример Live

Вопрос: почему я получаю это новое предупреждение Wunused-lambda-capture от clang?

Ответы

Ответ 1

Ваш код действителен.

Предупреждение Клана - бессмыслица.

Сообщить об этом как об ошибке.