такую вот ошибку:
http://paste.mva.name/co36VoGr.txt
Смысл в том, что там в хедере есть в структуре A вектор объявленных, но не определённых, типов B:
https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/passport/passport_panel_edit_scans.h#L38
И в объявлении метода есть параметр со значением по умолчанию типа optional<A> = nullopt:
https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/passport/passport_panel_edit_scans.h#L75
Читая ошибки от компилятора я вижу, что он хочет инстанциировать метод:
constexpr std::_Optional_base<Passport::ScanListData, false, false>::_Optional_base() = default;
и для этого зачем-то (!) инстанциирует метод:
std::_Optional_payload<Passport::ScanListData, false, false, false>::~_Optional_payload
Который, конечно, не может, потому что деструктор ScanListData не сделать в этом месте, тип внутри вектора не определён. Но зачем ему этот деструктор, он ведь там не может вызваться в принципе?
Все основные компиляторы (MSVC, GCC, Clang) всех актуальных версий (в случае GCC — до данной) хорошо это собирают. Кто виноват?
думаю, что проблема в дефолтном значении аргумента = nullopt
Если что, вот минимальный воспроизводимый пример https://godbolt.org/z/WKc7arxMs
согласно этой песочнице, ломается оно только на шланге. А как раз 12 гцц сам по себе - собирает
ну как и в вашем логе. там же компиляция clang, который использует libstdc++ от gcc 12.1
Обсуждают сегодня