Le contenu de est le même que l'en-tête de bibliothèque standard C , sauf qu'un macro nommé static_assert
n'est pas défini.1
Préférez .
Toutes les en-têtes C (y compris ) sont obsolètes:
D.5 En-têtes de bibliothèque standard C [depr.c.headers]
Mise à jour concernant le macro static_assert
de C
Dans D.5 [depr.c.headers], la norme C++ fait référence aux en-têtes comme "les en-têtes C:
1 Pour la compatibilité avec la bibliothèque standard C, la bibliothèque standard C++ fournit les en-têtes C indiqués dans le Tableau 141.
En C++14, la spécification faisait référence à C99 (ISO/CEI 9899:1999). C99 ne définissait pas le macro static_assert
(dans aucun en-tête). C++14 disait ceci à propos de dans 19.3 [assertions]:
2 Le contenu est le même que l'en-tête de bibliothèque standard C .
C++17 fait référence à C11 (ISO/CEI 9899:2011) qui le fait définir static_assert
dans , et dit ceci à propos de dans 22.3.1 [cassert.syn]:
1 Le contenu est le même que l'en-tête de bibliothèque standard C , sauf qu'un macro nommé static_assert
n'est pas défini.
C++14 et C++17 définissent uniquement en référence à leurs spécifications C respectives, ainsi que par ceci:
Voir aussi: ISO C 7.2.
(qui est la section C qui spécifie )
La façon dont je comprends ceci, techniquement , lorsqu'il est compilé avec un compileur C++17, définit en fait un macro nommé static_assert
. Cependant, le faire serait inutile, et je ne peux pas imaginer qu'une implémentation le fait réellement.
Quoi qu'il en soit, je maintiens ma recommandation ci-dessus:
Préférez .
C'est simplement la manière de faire en C++. Et au moins en C++98/03/11/14/17, cela évite de dépendre de fonctionnalités obsolètes. Qui sait ce que C++20 apportera. Mais C++20 ne dépréciera certainement pas .
1 22.3.1 Synopsis de l'en-tête [cassert.syn]
2 Lien vers la spécification C++11.
3 Lien vers la spécification C++17.