В настоящее время я переписываю небольшой проект, который я написал некоторое время назад, и заменяю указатели функций на std::function
и лямбды.
При этом я наткнулся на проблему с циклами for в лямбдах.
в Visual Studio 2010 (с пакетом обновления 1) генерирует странные ошибки при использовании циклов for внутри лямбда-выражений, если лямбда-выражение определяется в области действия файла:
#include <iostream>
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 <iostream>
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?
Знаете ли вы какие-нибудь обходные пути?
Edit:
Отчет об ошибке в Microsoft Connect:
https://connect.microsoft.com/VisualStudio/feedback/details/660742/error-with-for-loops-in-file-scope-lamdas-c-0x#details