P0780 ("Разрешить расширение пакета в lambda init-capture"), одобренный для С++ 20, позволяет генерировать пакет элементов данных замыкания, помещая многоточие (...
) перед расширением пакета как часть захвата лямбды.
Это полезно, например, при захвате пачки ходом:
template <typename... Ts>
void foo(Ts... xs)
{
bar([...xs = std::move(xs)]{ /* ... */ });
}
Играя с этой функцией, я придумал эту загадочную конструкцию:
template <typename... Ts>
void foo(Ts... xs)
{
[...xs...]{}();
}
int main()
{
foo(0, 1, 2);
}
g++ (транк) компилирует его, но я честно пытаюсь понять его значение. Что это должно означать? Что будет сгенерировать замыкание в качестве членов данных?