Dari FAQ Bjarne Stroustrup C ++ 0x :
__cplusplus
Di C ++ 0x makro __cplusplus
akan disetel ke nilai yang berbeda dari (lebih besar dari) arus 199711L
.
Meskipun ini tidak membantu seperti yang diinginkan. gcc
(tampaknya selama hampir 10 tahun) menetapkan nilai ini 1
, mengesampingkan satu kompiler utama, hingga diperbaiki ketika gcc 4.7.0 keluar .
Ini adalah standar C ++ dan nilai apa yang seharusnya dapat Anda harapkan __cplusplus
:
- C ++ pre-C ++ 98:
__cplusplus
adalah 1
.
- C ++ 98:
__cplusplus
adalah 199711L
.
- C ++ 98 + TR1: Ini terbaca sebagai C ++ 98 dan tidak ada cara untuk memeriksa yang saya ketahui.
- C ++ 11:
__cplusplus
adalah 201103L
.
- C ++ 14:
__cplusplus
adalah 201402L
.
- C ++ 17:
__cplusplus
adalah 201703L
.
Jika kompilator mungkin lebih tua gcc
, kita perlu menggunakan peretasan khusus kompilator (lihat makro versi, bandingkan dengan tabel dengan fitur yang diterapkan) atau gunakan Boost.Config (yang menyediakan makro yang relevan ). Keuntungannya adalah kami sebenarnya dapat memilih fitur tertentu dari standar baru, dan menulis solusi jika fitur tersebut hilang. Ini sering kali lebih disukai daripada solusi grosir, karena beberapa kompiler akan mengklaim menerapkan C ++ 11, tetapi hanya menawarkan sebagian fitur.
Stdcxx Wiki menghosting matriks komprehensif untuk dukungan kompiler fitur C ++ 0x (jika Anda berani memeriksa sendiri fiturnya).
Sayangnya, pemeriksaan fitur yang lebih detail (mis. Fungsi pustaka individual seperti std::copy_if
) hanya dapat dilakukan dalam sistem build aplikasi Anda (jalankan kode dengan fitur tersebut, periksa apakah telah dikompilasi dan menghasilkan hasil yang benar - autoconf
adalah alat pilihan jika mengambil rute ini).