Ligação de Int Const estático não é mais Literal

Declaração de um membro constante de uma classe foi alterado de Managed Extensions for C++ para Visual C++.

Embora static const integrais membros ainda são suportados, mudou seu atributo de vinculação.Seu atributo de ligação anterior agora é 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 do campo (Observe o atributo literal):

.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 é visto 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 que o mesmo atributo literal inter-language, a declaração deve ser alterada para recentemente com suporte literal membro de dados, como segue,

public ref class Constants {
public:
   literal int LOG_DEBUG = 4;
};

Consulte também

Referência

literal (Extensões de Componentes C++)

Conceitos

Declarações de membro em uma classe ou uma interface (C++/CLI)