Как сконвертировать GNU-C вложенные функции в лямбды С++ и чтоб переносимо
Добрый день,
есть тонна своего кода на GNU-C, который использует вложенные функции (nested functions), которые так и не воткнули в стандарт. Решил таки перетащить это все на стандартный С++. Всегда думал, что ламбды в С++ - это почти то же самое, что и вложенные функции. Уткнулся, что не могу скомпилировать вроде бы тривиальщину:
void Func(int N, int M, double *_X)
{ double (*X)[M] = static_cast<double (*)[M]>((void*)_X);
int i, j;
double (*Tester1)(int, int);
double (*Tester2)(double *);
Tester1 = [&] (int k, int l) -> double
{ return (double)(k*1000+l); };
Tester2 = [&] (double *XX) -> double
{ int i; double r; for(i=1; i<M; i++) r+=XX*XX; return r; };
for(i=0; i<N; i++)
for(j=0; j<M; j++)
X[j]=Tester1(i,j); // i*1000+j;
for(i=0; i<N; i++)
X[0]=Tester2(X+1);
return;
}
причем первая лямбда (Tester1) компилируется, а вторая - нет что типа не может сконвертировать тип.
Подскажите, пожалуйста, что я делаю не так?
Спасибо!