Suppression des listes de paramètres de modèle redondants dans les constructeurs de modèles de classe en C 20
En C 17, il était acceptable que les constructeurs de modèles de classe aient listes de paramètres de modèle redondantes. Par exemple :
template<typename T> struct S { S<T>(); };
Or, en C 20, ce n'est plus le cas. Un changement récent exige que tous les constructeurs de modèles de classe utilisent le nom de classe injecté, ce qui élimine la redondance dans le déclarateur.
Cette modification est documentée dans la section de compatibilité du projet C 20 :
[diff.cpp17.class] **Affected subclauses**: [class.ctor] and [class.dtor] **Change**: A simple-template-id is no longer valid as the declarator-id of a constructor or destructor. **Rationale**: Remove potentially error-prone option for redundancy. **Effect on original feature**: Valid C++ 2017 code may fail to compile in this International Standard.
Plus précisément, l'expression id dans le déclarateur du constructeur doit maintenant prendre l'un des éléments suivants form :
Par conséquent, le bon la déclaration du constructeur en C 20 est simplement :
template<typename T> struct S { S(); };
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!