Использование Boost с компилятором C ++ 14

Когда я компилирую свой код с поддержкой C ++ 11 (используя -std=c++11 флаг) и использовать не-заголовочные библиотеки Boost, тогда мне нужно скомпилировать Boost с -std=c++11, Это связано с тем, что при включенном C ++ 11 Boost имеет некоторые различия в интерфейсах в заголовочных файлах, а некоторые сигнатуры функций различаются для разных стандартов C ++.

Мой вопрос заключается в том, верно ли то же самое с C ++ 14 (с использованием g ++ 4.9, с флагом `-std = c ++ 1y), или безопасно использовать Boost, скомпилированный с C ++ 11, для программы, скомпилированной с C ++ 14?

3

Решение

Это очень широкий вопрос, на который трудно ответить однозначно, потому что

  • Boost — федерация библиотек, многим из которых более десяти лет
  • в принципе может быть достаточно обратной совместимости, некоторые обнаруживаются компилятором, а некоторые только модульными тестами
  • многие библиотеки Boost на самом деле являются реализациями C ++ 98 функций C ++ 11/14 (как библиотек, так и функций компилятора), так что вам не нужно использовать это в проекте C ++ 11/14.
  • Сам Boost очень спорят о том, в каком темпе следует обновить библиотеку до C ++ 11/14, нужно ли писать версии библиотек V2, которые в полной мере используют преимущества C ++ 11/14, и даже о том, будет ли новый C ++ 11 Библиотеки / 14 должны обеспечивать обратную совместимость с C ++ 98

Возможно, вы захотите внимательно прочитать ошибки вашего компилятора (если они есть) и сравнить их со списком критических изменений, приведенным ниже. Кроме того, я бы рекомендовал следовать Испытательный жгут для поиска подозрительных комбинаций компилятор / библиотека, которые применимы к вашей системе.

Некоторые соответствующие вопросы&А здесь:

  1. Какие критические изменения введены в C ++ 11?
  2. Какие изменения, внесенные в C ++ 14, могут потенциально сломать программу, написанную на C ++ 11?
  3. Соответствующие функции повышения по сравнению с C ++ 11
  4. Насколько хорошо Boost использует C ++ 11?
4

Другие решения


По вопросам рекламы [email protected]