En lien avec les questions Comment vérifier le support C++ 11? et Quelle est la valeur de __cplusplus pour C++ 17?
Comment puis-je savoir si le compilateur peut gérer/est configuré pour utiliser C++ 20? Je sais qu'il est en principe possible de se renseigner sur la version C++ en:
#if __cplusplus > ???
// C++20 code here
#endif
Qu'est-ce que doit ???
être pour C++ 20?
C'est trop tôt pour ça.
Jusqu'à ce que le standard le remplace, utilisez:
#if __cplusplus > 201703L
// C++20 code
#endif
puisque la macro prédéfinie de C++ 20 sera plus grande que celle de C++ 17.
Comme le dit la réponse de @ SombreroChicken, [cpp.predefined] (1.1) spécifie (souligné par moi):
__cplusplus
Le littéral entier
201703L
. [Remarque: il est prévu que les futures versions de la présente Norme internationale remplacent la valeur de cette macro par un valeur supérieure .]
Les macros utilisées, à compter de novembre 2018, sont les suivantes:
201709L
pour C++ 2a. Live demo201707L
. Live demo201704L
_ (comme le mentionne la réponse de @ Acorn).PS: Si des fonctionnalités spécifiques vous intéressent, alors [cpp.predefined] (1.8) définit les macros correspondantes, que vous pourriez utiliser. Notez cependant qu'ils pourraient changer dans le futur.
La nouvelle valeur sera disponible à un moment donné à [cpp.predefined] p1.1 :
__cplusplus
Le littéral entier
201703L
. [Remarque: il est prévu que les futures versions de la présente Norme internationale remplacent la valeur de cette macro par une valeur supérieure. - note de fin]
Les valeurs actuelles utilisées dans les principaux compilateurs sont, à compter du 2018-11-30:
201709L
godbolt201707L
godbolt201704L
godbolt (nécessite /Zc:__cplusplus
)Puisque tous sont déjà plus élevés que ceux de C++ 17, 201703L
, vous pouvez déjà utiliser:
#if __cplusplus > 201703L
// C++20 code
#endif
Il n'y a pas de connu __cplusplus
_ version encore car C++ 20 est encore en développement. Il n'y a que des brouillons pour C++ 20.
Le dernier projet N4788 contient toujours:
__cplusplus
Le littéral entier
201703L
. [Remarque: il est prévu que les futures versions de la présente Norme internationale remplacent la valeur de cette macro par une valeur supérieure. —Fin note]
Pour le vérifier, j'utiliserais @gsamaras answer.