Bjarne Stroustrup C ++ 0x SSS'den :
__cplusplus
C ++ 0x'de makro __cplusplus, mevcut değerden farklı (daha büyük) bir değere ayarlanacaktır 199711L.
Bu, birinin istediği kadar yararlı olmasa da. gcc(görünüşe göre yaklaşık 10 yıldır) bu değer 1, gcc 4.7.0 çıktığında düzeltilene kadar büyük bir derleyiciyi dışarıda bırakarak olarak ayarlanmıştı .
Bunlar C ++ standartlarıdır ve aşağıdakilerden hangi değeri beklemeniz gerekir __cplusplus:
- C ++ C ++ 98 öncesi:
__cplusplusis 1.
- C ++ 98:
__cplusplusolur 199711L.
- C ++ 98 + TR1: Bu, C ++ 98 olarak okuyor ve bildiğimi kontrol etmenin bir yolu yok.
- C ++ 11:
__cplusplusolur 201103L.
- C ++ 14:
__cplusplusolur 201402L.
- C ++ 17:
__cplusplusolur 201703L.
Derleyici daha eski olabilirse gcc, derleyiciye özgü bilgisayar korsanlığına başvurmalıyız (bir sürüm makrosuna bakmalı, onu uygulanan özelliklere sahip bir tabloyla karşılaştırmalıyız) veya Boost.Config ( ilgili makroları sağlayan ) kullanmalıyız. Bunun avantajı, yeni standardın belirli özelliklerini gerçekten seçebilmemiz ve özellik eksikse bir geçici çözüm yazabilmemizdir. Bu genellikle bir toptan çözüme göre tercih edilir, çünkü bazı derleyiciler C ++ 11'i uyguladığını iddia eder, ancak özelliklerin yalnızca bir alt kümesini sunar.
Stdcxx Wiki , C ++ 0x özelliklerinin derleyici desteği için kapsamlı bir matris barındırır (özellikleri kendiniz kontrol etmeye cesaret ederseniz).
Ne yazık ki, özelliklerin daha hassas bir şekilde kontrol edilmesi (örneğin, bireysel kütüphane işlevleri gibi std::copy_if) yalnızca uygulamanızın derleme sisteminde yapılabilir (özellik ile kod çalıştırın, derlenip derlenmediğini ve doğru sonuçlar üretip üretmediğini kontrol edin - alıyorsanız autoconftercih edilen araçtır. bu rota).