none
Использование спецификатора auto в цикле for each RRS feed

  • Общие обсуждения

  • Может быть кто-нибудь сталкивался с данной проблемой в 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.

    31 октября 2016 г. 13:57