Вот код.
#include<struct.h>
#include<iostream>
#include<functional>
using namespace std;
void LambdaTest(const function <struct dummy (void)>& f)
{
struct dummy test = f();
cout<<test.a<<endl;
}
int main()
{
int val = 5;
struct dummy dum;
auto func = [val](void) -> struct dummy
{
dummy temp;
temp.a = val;
return temp;
};
LambdaTest(func);
return 0;
}
Файл struct.h очень прост.
struct dummy
{
int a;
};
GCC жалуется, что
lambda_struct.cpp: 19: 38: ошибка: поле «temp» имеет неполный тип
Это разрешено? Если да, то как мне это исправить? Если нет, то почему бы и нет?
EDIT:
Ошибка типа возврата в коде (обнаруженная другими) теперь исправлена.
РЕШЕНИЕ:
Проблема состоит в том, что стандарт C ++ 0x позволяет определять новую структуру (и, вероятно, тоже класс) в типе возврата самого лямбда-определения. Поэтому, если ключевое слово struct присутствует в возвращаемом типе, компилятор подумает, что это новый тип, и начнет жаловаться.
Фиксированный код
#include<struct.h>
#include<iostream>
#include<functional>
using namespace std;
void LambdaTest(const function <struct dummy (void)>& f)
{
struct dummy test = f();
cout<<test.a<<endl;
}
int main()
{
int val = 5;
struct dummy dum;
auto func = [val](void) -> dummy
{
dummy temp;
temp.a = val;
return temp;
};
LambdaTest(func);
return 0;
}