Ligação de Int Const estático não é mais Literal
Declaração de um membro constante de uma classe foi alterado a partir de Managed Extensions for C++ para Visual C++ 2010.
Embora static const membros integrais ainda são suportados, mudou seu atributo de vinculação. Agora, seu atributo de ligação anterior é executado em um membro integral literal. Por exemplo, considere a seguinte classe Managed Extensions:
public __gc class Constants {
public:
static const int LOG_DEBUG = 4;
};
Isso gera os seguintes atributos CIL subjacentes para o campo (Observe o atributo literal) (em inglês):
.field public static literal int32
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
Enquanto isso ainda compila sob a nova sintaxe:
public ref class Constants {
public:
static const int LOG_DEBUG = 4;
};
ele não emite o atributo literal e, portanto, não estiver exibido como uma constante em tempo de execução CLR:
.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
Para ter o mesmo atributo literal inter-language, a declaração deve ser alterada para recentemente com suporte literal o membro de dados, como segue,
public ref class Constants {
public:
literal int LOG_DEBUG = 4;
};