https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88694
--- Comment #2 from Amos Bird <amosbird at gmail dot com> ---
Currently by introducing a `auto local_i = decltype(i)();` can workaround this.
#include <iostream>
#include <tuple>
#include <utility>
template <typename T, T Begin, class Func, T... Is>
constexpr void static_for_impl(Func&& f, std::integer_sequence<T, Is...>) {
(f(std::integral_constant<T, Begin + Is>{}), ...);
}
template <typename T, T Begin, T End, class Func> constexpr void
static_for(Func&& f) {
static_for_impl<T, Begin>(std::forward<Func>(f),
std::make_integer_sequence<T, End - Begin>{});
}
struct Foo {
template <int x> void print() { std::cout << x << std::endl; }
};
int main() {
Foo foo;
static_for<int, 0, 3>([&](auto i) {
[&]() {
auto local_i = decltype(i)();
foo.print<local_i>();
}();
});
return 0;
}