Je migre un projet existant vers VS2019. Ayant une structure très simple qui a été compilée avec succès dans toutes les versions précédentes:
template <class Marker> struct not { // ...
erreur C2332: 'struct': nom de balise manquant
NOTE-1 J'ai vérifié par génération de pré-compilation que non
n'est pas remplacé par certaines macros, sortie de * .i
correspond entièrement à la déclaration ci-dessus
NOTE-2 bien sûr si je renomme not
-> inv
alors tout va bien
3 Réponses :
not
est un mot-clé en C ++, il ne peut pas être utilisé comme nom de classe.
Consultez la liste des mots clés sur cppreference.
not
est un opérateur alternatif pour !
, c'est-à-dire un mot-clé C ++ et, par conséquent, il ne peut pas être utilisé dans la dénomination. p >
Consultez la documentation .
not
est un mot-clé en C ++ standard qui peut être utilisé comme alternative pour le jeton !
.
MSVC ne prend pas en charge les jetons d'opérateur alternatifs par défaut. Par conséquent, ils sont disponibles comme identifiants et vous n'obtenez pas d'erreur sur votre déclaration.
Mais en mode de conformité avec l'indicateur de compilateur / permissive-
, ces jetons sont considérés comme des mots-clés avec leur signification standard et ne sont donc pas disponibles comme identifiants.
Je suggère de ne pas utiliser not
comme identifiant, même si vous n'utilisez pas le mode de conformité, car cela rend votre code non standard et non portable.
Voir https://docs.microsoft. com / fr-fr / cpp / build / reference / permissive-standards-conformance
et Pourquoi VS ne définit-il pas le jetons alternatifs pour les opérateurs logiques?
Vérifiez eel.is/c++draft/lex.key#2 : la représentation alternative
non
est réservée et ne doit pas être utilisée autrement .not
est un mot-clé en C et C ++ en.cppreference.com / w / cpp / language / operator_alternative , il est étrange que cela ait fonctionné avant@RoQuOTriX: en effet. La question ne devrait pas être "Pourquoi cela donne-t-il une erreur maintenant?" mais "Pourquoi cela n'a-t-il pas donné d'erreur avant?".
@Dewfy consultez ceci pour plus d'informations - stackoverflow.com/questions/2376448/...
@walnut - s'il vous plaît, faites-le comme une réponse - puisque vous êtes le seul à avoir un point "comment résoudre". Merci!