Может быть кто-нибудь сталкивался с данной проблемой в MS VS 2015 и может предоставить ссылку на соответствующий раздел документации на сайте Microsoft?
Следующая программа на C++/CLI успешно компилируется
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
array<String ^> ^a = { "one", "two", "three" };
for each (auto s in a) Console::Write("{0} ", s);
Console::WriteLine();
return 0;
}
Обратите внимание на использование слова auto в предложении с for each.
Однако если использовать двухмерный массив, как показано в следующей программе
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
array<String ^, 2> ^a =
{
{ "one", "two" },
{ "three", "four" }
};
for each (auto s in a) Console::Write("{0} ", s);
Console::WriteLine();
return 0;
}
то компилятор уже не пропускает такой код и выдает сообщение об ошибке
Ошибка C3537 нельзя привести к типу, содержащему "auto"
Ошибка C2440 static_cast: невозможно преобразовать "System::String ^" в "int"
Ежели заменить слово auto на String ^, то программа будет успешно компилироваться.
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
array<String ^, 2> ^a =
{
{ "one", "two" },
{ "three", "four" }
};
for each (String ^s in a) Console::Write("{0} ", s);
Console::WriteLine();
return 0;
}
Хотелось бы посмотреть на описание данного ограничения в первоисточнике, то есть в документации на сайте Microsoft.