следующий фрагмент кода не будет компилироваться под gcc4.6.1:
template <typename... TS>
void do_stuff(TS... ts)
{
auto f = [](TS... things) { };
}
Он выдает сообщение об ошибке, указывающее, что пакет не был расширен. Однако следующий код выполняет компиляцию:
template <typename... TS>
void do_stuff(TS... ts)
{
auto f = [](TS... things...) { };
}
Обратите внимание на дополнительный оператор распаковки после событий внутри списка параметров. Я никогда не видел ситуации, когда вариационный пакет должен был быть расширен во время его объявления. Поэтому мой вопрос к вам добрым людям:
Является ли это законным синтаксисом С++ 0x (фрагмент, который компилируется), или это просто причуда с GCC, когда дело касается вариационных типов?