https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114495

            Bug ID: 114495
           Summary: Capture error in lambda fold
           Product: gcc
           Version: 13.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: andipeer at gmx dot net
  Target Milestone: ---

The following code

#include <utility>

template <typename... Args>
void func(Args... args)
{
    auto f = [&]<std::size_t... Indices>(std::index_sequence<Indices...>,
Args... args) {
        auto f2 = [&](auto, auto) { };
        (f2(Indices, args), ...);
    };
    f(std::make_index_sequence<sizeof...(args)>(),
std::forward<Args>(args)...);
}

int main()
{
  func(3);
  return 1;
}

is accepted by Clang and MSVC, but fails on GCC with 
  error: 'args#0' is not captured
   (f2(Indices, args), ...);

It however compiles when changing the signature of the lambda `f` to use `auto`
instead of `Args` for the second parameter:

auto f = [&]<std::size_t... Indices>(std::index_sequence<Indices...>, auto...
args)


Online demo: https://gcc.godbolt.org/z/TjexTjhnc

Reply via email to