Maison > développement back-end > C++ > Pourquoi les listes de paramètres de modèle redondantes dans les constructeurs de modèles de classe C 20 sont-elles désormais une erreur ?

Pourquoi les listes de paramètres de modèle redondantes dans les constructeurs de modèles de classe C 20 sont-elles désormais une erreur ?

DDD
Libérer: 2024-11-19 06:32:02
original
503 Les gens l'ont consulté

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now an Error?

Listes de paramètres de modèle redondants dans les constructeurs de modèles de classe en C 20

En C , la syntaxe de déclaration des constructeurs dans les modèles de classe a subi une modification en C 20. Auparavant, le code de la forme suivante était considéré comme bien formé :

template<typename T>
struct S {
    S<T>();
};
Copier après la connexion

Malgré la redondance du paramètre de modèle dans la déclaration du constructeur, ce code a été compilé avec succès. Cependant, en C 20 avec l'indicateur -std=c 20 activé, le tronc GCC signale désormais une erreur pour ce code :

error: expected unqualified-id before ')' token
3 |     S<T>();
^
Copier après la connexion

Bien que cette erreur ne soit pas rencontrée dans GCC10.2 ou Clang avec -std= c 20, il découle d'un changement fondamental introduit dans C 20.

Selon la section de compatibilité C 20, l'utilisation d'un simple-template-id comme déclarant-id pour un constructeur ou un destructeur n'est plus valide. Cette décision vise à éliminer les redondances potentielles sujettes aux erreurs.

Le nouveau libellé de la section [class.ctor] de C 20 spécifie que pour les constructeurs dans les déclarations de membres dans les modèles de classe, le nom de classe injecté doit être utilisé à la place. :

template<typename T>
struct S {
    S();  // Use injected-class-name
};
Copier après la connexion

Dans cet exemple, S représente le nom de classe injecté pour le modèle de classe interne. Par conséquent, le Le paramètre de modèle est supprimé de la déclaration du constructeur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal