Безопасно ли использовать библиотеку ниже стандартом?
Например, мой код компилируется компилятором со стандартом c++20. При этом использует библиотеку (не header-only), скомпилированную тем же компилятором, но со стандартом c++17. Безопасно ли это?
Ответы (2 шт):
Безусловно можно использовать библиотеки, написанные на разных стандартах языка. Более того, можно даже использовать разные языки. Главное, что нужно обеспечить при этом - совместимость на уровне ABI. Т.е. Application Binary Interface.
Если речь идёт о разных версиях одного компилятора, или даже об одной и той же версии компилятора, но кода, собранного с указанием различных C++ стандартов, то надо смотреть на таблицу совместимостей ABI. Например, для MSVC заявлено, что для MSVC 2015 и новее такая совместимость есть. Про gcc можно почитать тут.
В целом должно быть безопасно.
Хотя third-party библиотеки могут понаписать у себя в хедерах такого, что это не будет работать (проверить версию стандарта через #if __cplusplus == ...
, и воткнуть разный код для разных версий), это редкость, и по хорошему должно быть написано жирным шрифтом в мануале.