Привет всем!
При переносе кода с 2015 студии на 2019, получил интересное сообщение об ошибке — якобы повторное определение лямбды. После пошаговой минимизации кода получил такую вот выжимку:
http://coliru.stacked-crooked.com/a/6ae252b1d32a2985
template <typename...F>
void accept(F&&...) { }
template <typename...F>
auto make(F&&...f)
{
return [=](auto&&...)
{
accept(f...);
accept(f...); // error C2086: 'const main::<lambda_0d72bcd0d3210a40f73932d5a7eecd45> &<<f_0>>': redefinition
};
}
int main()
{
make([]{});
}
Как видно, ошибку провоцирует ПОВТОРНОЕ(!) обращение к функции accept. Проявляется только при использовании toolset 142, при 140 все норм. Переключение между C++14 и C++17 эффекта не дает. Семейство GCC ничего против не имеет.
Бага студии, как я понимаю?
[UPD]: Ошибка уходит при переключении на максимальную версию стандарта (/stdc++latest).
[UPD2]: Зарепортил им багу.