Le compilateur C++ de Gnu semble définir __cplusplus
être 1
#include <iostream>
int main() {
std::cout << __cplusplus << std::endl;
}
Ce imprime 1
avec gcc c++ standard mode, ainsi que dans C++0x mode, avec gcc 4.3.4, et gcc 4.7.0.
Le C++11 FDIS dit dans "de 16,8 macro Prédéfinie noms [rpc.prédéfini]" que
Le nom de l'
__cplusplus
est défini à la valeur 201103L lors de la compilation en C++ de l'unité de traduction. (Note de bas de page: Il est prévu que les futures versions de cette norme remplacera la valeur de cette macro avec une plus grande valeur. Non-conformes à la com- pilers devez utiliser une valeur avec au plus cinq chiffres après la virgule.)
L'ancien std C++03 avait une règle similaire.
Est la GCC deliberatly cette définition 1
, parce qu'il est "non conforme"?
En lisant cette liste, j'ai pensé que je pourrais utiliser __cplusplus
de vérifier de façon portable si j'ai un C++11 activé compilateur. Mais avec g++ , cela ne semble pas fonctionner. Je sais à propos de l' ...EXPERIMENTAL...
macro, mais j'étais curieux de savoir pourquoi g++ est la définition de la __cplusplus
de cette façon.
Mon premier problème a été de basculer entre les différents pointeur null-variantes. Quelque chose comme ceci:
#if __cplusplus > 201100L
# define MYNULL nullptr
#else
# define MYNULL NULL
#endif
Est-il simple et raisonnablement portable façon de mettre en œuvre un tel changement?