La valeur pour C++20 est 202002L
, comme vous pouvez le voir à [cpp.predefined]p1.1:
__cplusplus
La littérale entière 202002L
. [ Note: Il est prévu que les futures versions de cette Norme internationale remplaceront la valeur de cette macro par une valeur supérieure. — note de fin ]
Par conséquent, pour les compilateurs qui implémentent déjà la nouvelle norme, vous pouvez vérifier en utilisant :
#if __cplusplus >= 202002L
// Code C++20 (et plus récent)
#endif
Voici le support du compilateur jusqu'à présent:
- Clang >= 10
- GCC >= 11
- ICX >= 2021
- ICC: Non (la version >= 2021 définit
202000L
; notez le 0
).
- MSVC: Non (jusqu'à la version 19.28, notez qu'il nécessitera
/Zc:__cplusplus
).
Pour ceux qui ne l'implémentent pas encore, vous pouvez plutôt utiliser :
#if __cplusplus > 201703L
// Code C++20 (et plus récent)
#endif
Étant donné que tous les compilateurs la définissent déjà plus haut que le 201703L
de C++17 dans leur mode "C++ le plus récent" respectif.