La liaison Static Const Int n'est plus littérale
La déclaration d'un membre constant d'une classe a été modifiée entre Extensions managées pour C++ et Visual C++ 2010.
Bien que les membres intégraux static const soient encore pris en charge, leur attribut de chaînage a été modifié. Leur précédent attribut de chaînage est désormais porté par un membre intégral littéral. Par exemple, considérons la classe Extensions managées suivante :
public __gc class Constants {
public:
static const int LOG_DEBUG = 4;
};
Elle génère pour le champ les attributs CIL sous-jacents suivants (notez l'attribut littéral) :
.field public static literal int32
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
Bien qu'elle continue à compiler sous la nouvelle syntaxe :
public ref class Constants {
public:
static const int LOG_DEBUG = 4;
};
elle n'émet plus l'attribut littéral, et par conséquent n'est pas affichée comme une constante par le runtime CLR :
.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
Pour conserver le même attribut littéral d'un langage à l'autre, il faut transformer la déclaration en la donnée membre literal récemment prise en charge, comme suit,
public ref class Constants {
public:
literal int LOG_DEBUG = 4;
};