Я столкнулся с реальными проблемами из-за этого, потому что мне нужен один и тот же код для компиляции с разными версиями g ++ (компилятор GNU C ++). Поэтому мне пришлось использовать макрос, чтобы увидеть, какая версия компилятора использовалась, и затем действовать соответствующим образом, например
#if __GNUC__ > 5
#define GNU_CONST_STATIC_FLOAT_DECLARATION constexpr
#else
#define GNU_CONST_STATIC_FLOAT_DECLARATION const
#endif
GNU_CONST_STATIC_FLOAT_DECLARATION static double yugeNum=5.0;
Это будет использовать 'const' для всего до g ++ версии 6.0.0, а затем использовать 'constexpr' для g ++ версии 6.0.0 и выше. Это догадка в версии, где происходит изменение, потому что, честно говоря, я не заметил этого до g ++ версии 6.2.1. Чтобы сделать это правильно, вам, возможно, придется взглянуть на младшую версию и номер патча g ++, поэтому смотрите
https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
для подробной информации о доступных макросах.
С помощью gnu вы также можете везде использовать 'const', а затем компилировать с флагом -fpermissive
, но это дает предупреждения, и мне нравится, что мои вещи компилируются чисто.
Не очень хорошо, потому что он специфичен для компиляторов gnu, но я подозреваю, что вы можете сделать то же самое с другими компиляторами.