Расширение пакета параметров в лямбду с помощью выражения сгиба - gcc vs clang

Учитывая следующий фрагмент кода:

template <typename TF>
void post(TF){ }

template <typename... TFs>
struct funcs : TFs...
{
    funcs(TFs... fs) : TFs{fs}... { }

    void call() 
    { 
        (post([&]{ static_cast<TFs&>(*this)(); }), ...); 
    }
};

лязг ++ 3.8+ успешно компилирует код.

g ++ 7.0 не компилируется со следующей ошибкой:

prog.cc: In lambda function:
prog.cc:10:43: error: parameter packs not expanded with '...':
        (post([&]{ static_cast<TFs&>(*this)(); }), ...);
                   ~~~~~~~~~~~~~~~~~~~~~~~~^~
prog.cc:10:43: note:         'TFs'
prog.cc: In member function 'void funcs<TFs>::call()':
prog.cc:10:13: error: operand of fold expression has no unexpanded parameter packs
        (post([&]{ static_cast<TFs&>(*this)(); }), ...);
         ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Удалениеpost зов и лямбдазаставляет g ++ компилировать выражение сгиба.

Является ли это взаимодействие между лямбдами, выражениями сворачивания и вызовами функций шаблона каким-то образом запрещенным стандартом, или это ошибка gcc?

Ответы на вопрос(2)

Ваш ответ на вопрос