При попытке отладить проблему с макросом 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.Существуют ли другие параметры проекта, которые могут повлиять на это?