Від Bjarne Stroustrup C ++ 0x FAQ :
__cplusplus
У C ++ 0x макросу __cplusplusбуде встановлено значення, яке відрізняється від (більше, ніж) поточного 199711L.
Хоча це не так корисно, як хотілося б. gcc(мабуть, протягом майже 10 років) було встановлено це значення 1, виключаючи одного основного компілятора, поки воно не було встановлено, коли вийшов gcc 4.7.0 .
Це стандарти C ++, і яке значення ви повинні мати на очікування у __cplusplus:
- C ++ pre-C ++ 98:
__cplusplusє 1.
- C ++ 98:
__cplusplusє 199711L.
- C ++ 98 + TR1: Це означає, що C ++ 98, і немає можливості перевірити, що я знаю.
- C ++ 11:
__cplusplusє 201103L.
- C ++ 14:
__cplusplusє 201402L.
- C ++ 17:
__cplusplusє 201703L.
Якщо компілятор може бути старшим gcc, нам потрібно вдатися до конкретного хакерського компілятора (подивіться на макрос версії, порівняйте його з таблицею з реалізованими функціями) або скористайтеся Boost.Config (який надає відповідні макроси ). Перевагою цього є те, що ми фактично можемо вибрати конкретні особливості нового стандарту та написати вирішення, якщо функція відсутня. Це часто надається перевагу над оптовим рішенням, оскільки деякі компілятори вимагають впровадити C ++ 11, але пропонують лише підмножину функцій.
У Stdcxx Wiki розміщена вичерпна матриця для підтримки компілятора функцій C ++ 0x (якщо ви зважилися перевірити їх на себе).
На жаль, більш точну перевірку функцій (наприклад, окремих функцій бібліотеки на зразок std::copy_if) можна здійснити лише в системі збирання вашої програми (запустіть код за допомогою функції, перевірте, чи вона зібрала та дали правильні результати - autoconfце інструмент вибору, якщо брати цей маршрут).