P0780 ("Разрешить расширение пакета в lambda init-capture"), одобрено для C+ +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++ (trunk) компилирует его, но я, честно говоря, изо всех сил пытаюсь понять его значение. Что это должно означать? Что будет иметь замыкание generate в качестве элементов данных?