__is_standard_layout
Remonter à Fonctions trait de type (C++11) - Index
Catégorie
Fonctions trait de type
Syntaxe
bool __is_standard_layout(typename T)
Renvoie true si et seulement si T est un type implémentation standard.
Erreur si T est un type incomplet.
Les classes d'implémentation standard sont définies dans la section 9, p 6 du "Working Draft".
Un type implémentation standard est :
- un type scalaire
- un tableau de types implémentation standard
- un type classe d'implémentation standard
Une classe d'implémentation standard est une classe qui :
- n'a pas de données membres non-statiques autres que les types implémentation standard
- a le même contrôle d'accès pour toutes les données membres non-statiques (comme public ou privé)
- n'a pas de classes de base autres que les classes d'implémentation standard
- n'a pas de fonctions virtuelles ni de classes de base virtuelles
- n'a pas plus d'une classe dans le DAG de l'arborescence d'héritage ayant des données non-statiques
- n'a pas de classe de base de même type que la première donnée membre non statique (s'il y en a)
Les types implémentation standard déclenchent plusieurs clauses spéciales dans le standard, qui peuvent affecter la génération du code et les optimisations, ou simplement déterminer si certaines constructions ne sont pas définies. En particulier, les classes d'implémentation standard requièrent l'optimisation de base vide.
Notez que les types implémentation standard sont une généralisation des PODs dans le standard 2003, si l'amélioration de l'implémentation POD/standard n'est pas survenue quand cette fonction type a été initialement implantée.