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);
}
живой пример на godbolt.org
g ++ (trunk) компилирует его, но я честно пытаюсь понять его значение.Что это должно означать?Что будет сгенерировать замыкание в качестве членов данных?