__declspec (noinline) для лямбда-функции внутри класса шаблона выдает синтаксическую ошибку в VS2017 - PullRequest
0 голосов
/ 23 апреля 2019

При попытке отладить проблему с макросом assert я столкнулся с этой проблемой.Использование __declspec (noinline) для лямбда-функции в шаблонном классе создает синтаксическое предупреждение в Visual Studio 2017:

ошибка C2760: синтаксическая ошибка: неожиданный токен '__declspec', ожидаемый '{'

Это код ошибки:

template<class R>
class test
{
public:
    void DoStuff()
    {
        []() __declspec(noinline) { }; // syntax error
    }
};

int WinMain(void)
{
    return 0;
}

Если я зайду в настройки своего проекта и переключу набор инструментов моей платформы с v141 (vs2017) на v140 (vs2015) в общем разделе проектаДиалоговое окно свойств ошибка исчезает.

Если я изменю класс на класс шаблона, он также скомпилируется правильно:

class test
{
public:
    void DoStuff()
    {
        []() __declspec(noinline) { }; // compiles fine
    }
};

int WinMain(void)
{
    return 0;
}

Мне интересно, почему это не удастся с помощьюНабор инструментов платформы v141.Существуют ли другие параметры проекта, которые могут повлиять на это?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Мне удалось это исправить, обновив Visual Studio 2017 до последней версии (15.9.7). Ранее я работал под управлением версии 15.6.7. Спасибо всем, кто заглянул и прокомментировал! :)

0 голосов
/ 23 апреля 2019

Это работает в VC ++ 2019, так что может быть регрессия в 2017 году?

...