Я пытаюсь перехватить аргумент лямбда-вариации во внутренней лямбде и использовать его там.В качестве примера рассмотрим следующий код:
int main () {
auto first = [&] (auto&&... one) {
auto second = [&] (auto&&... two) {
return ((one * two) + ...);
};
return second(one...);
};
return first(5);
}
Это работает с gcc9, но не работает с clang8 (https://godbolt.org/z/i2K9cK).
. Способ сделать код компиляцией - явно захватить [&one...]
,но мне было интересно, является ли это ошибкой в clang.
Также интересно: изменение оператора return на что-то, где one
напрямую раскрывается (перед объединением с two
), это компилируется снова: return (((one * ...) * two) + ...);
Я нашел этот связанный пост, но объявленная там ошибка, кажется, исправлена в clang8.