В настоящее время я переписываю небольшой проект, написанный мной некоторое время назад, и заменяю указатели функций на std :: function
и лямбды.
При этом я наткнулся на проблему с циклами for в лямбдах. в Visual Studio 2010 (с пакетом обновления 1) генерирует странные ошибки, когда циклы for используются внутри лямбда-выражений, ЕСЛИ лямбда определена в области видимости файла:
#include
auto print_sum =
[]( int n )
{
int sum=0;
// line below generates:
// error C2143: syntax error : missing ')' before ';'
for( int i=1; i<=n; ++i )
sum += i;
std::cout << sum << "\n";
};
int main()
{
print_sum(3);
return 0;
}
следующий фрагмент, однако компилируется нормально:
#include
int main()
{
auto print_sum =
[]( int n )
{
int sum=0;
for( int i=1; i<=n; ++i )
sum += i;
std::cout << sum << "\n";
};
print_sum(3);
return 0;
}
Оба фрагмента отлично компилируются с использованием MinGW GCC 4.7.
Кто-нибудь еще наблюдал такое поведение? Это ошибка в реализации лямбда-выражения в Visual Studio? Знаете ли вы какие-либо обходные пути?
Изменить:
отчет об ошибке в Microsoft Connect:
https://connect.microsoft.com/VisualStudio/feedback/details/660742/error-with-for-loops-in -file-scope-lamdas-c-0x # подробности