исполняемый файл, скомпилированный с C++20. Является ли вызов функции из динамической библиотеки, в которую передается, например, std::vector UB?
зависит исключительно от используемого компилятора, не от стандарта
короче можешь нарваться на одр, можешь не нарваться
И поэтому я в принципе считаю что ABI совместимость - полная херня, и если ты хочешь динамические либы - то будь добр собрать с тем же компилятором )))
динамические либы вообще не нужны
если ограничится сишными интерфейсами на границе, то вполне будет хорошо
я думал это основная фича плюсов, что старые версии обязаны быть совместимы с новыми
Это к явистам наверное
это по исходным кодам. Компиляторы поддерживают обратную совместимость ABI только в мажорных версиях. Поэтому скорей всего std::vector, передаваемый из объектника, собранного с c++11 и c с++20 одним и тем же clang++-17, — это нормально.
я скорее про случай, когда либа скомпилена старым клангом много лет назад, и используется с новым кодом
ну если просто clang-ом, то наверное тоже всё нормально. Для C ABI на x64 стандартизирован няп
Завтсит от флагов. ЛТО билды могут ломаться даже на минорных версиях компилятора, там нужен полноценный сдк
А С++ аби для либс++ уже определяется самой либой и её флагами, например
Обсуждают сегодня