[msvc]: Интересная ошибка при портировании
От: rg45 СССР  
Дата: 14.11.20 23:40
Оценка: 20 (3)
Привет всем!

При переносе кода с 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]: Зарепортил им багу.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 15.11.2020 0:27 rg45 . Предыдущая версия . Еще …
Отредактировано 15.11.2020 0:02 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.