Parâmetros opcionais nos métodos gerenciados de C ++ / CLI

Como posso declarar um método gerenciado em C ++ / CLI que possui um parâmetro opcional quando usado em C #?

Decorei o parâmetro com umOpcional e umDefaultParameterValue atributo (consulte:Como os valores padrão dos parâmetros são codificados), mas apenas o atributo Opcional parece ser respeitado.

C ++ / CLI:

public ref class MyClass1
{
 public:
  MyClass1([System::Runtime::InteropServices::Optional]
           [System::Runtime::InteropServices::DefaultParameterValue(2)]
           int myParam1)                                            ↑
  {
    System::Console::WriteLine(myParam1);
  }
};

C #:

var myInstance1 = new MyClass1();  // compiles and runs

Resultado:

0

Saída esperada:

2

Visual C # IntelliSense:

MyClass1.MyClass1([int myParam1 = 0]);  // wrong default value
                                  ↑

Editar: Um exame mais detalhado com um desmontador revela que o compilador C ++ / CLI de fato não gera os requisitos.param [1] = int32(2) directiva. O código IL mostrado pelo Reflector está errado.

Refletor:

.method public hidebysig specialname rtspecialname instance void .ctor([opt] int32 myParam1) cil managed
{
    .param [1] = int32(2)  // bug
    ...

ILDASM:

.method public hidebysig specialname rtspecialname instance void .ctor([opt] int32 myParam1) cil managed
{
    .param [1]
    .custom instance void [System]System.Runtime.InteropServices.DefaultParameterValueAttribute::.ctor(object) = ( 01 00 08 02 00 00 00 00 00 ) 
    ...

questionAnswers(3)

yourAnswerToTheQuestion