Стандарт требует, чтобы реализации, соответствующие C ++ 11, определяли макрос с именем __cplusplus
и значением 201103L
.Несоответствующим компиляторам рекомендуется использовать значение не более пяти десятичных цифр.То же самое было верно для C ++ 03, где значение, к которому это должно быть определено, равно 199711L
.
Однако, не многие компиляторы считают (ed) себя соответствующими стандартам, и, например, gcc определил это в течение длительного временибыть просто 1L
.Также вы должны учитывать, что это не только версия компилятора, но и параметры компилятора.Gcc поддерживает (частично) C ++ 11 только когда вы передаете -std=c++0x
или -std=gnu++0x
.В этих случаях он будет определять макрос __GXX_EXPERIMENTAL_CXX0X__
.
. Таким образом, наиболее переносимым решением является непереносимость и наличие собственного макроса, который вы установили при обнаружении поддержки C ++ 11, и наличие некоторого заголовка / настройкискрипт, в котором вы используете вышеупомянутые вещи, а также, возможно, другие для других поддерживаемых компиляторов.