Я новичок в С++ 11. Я пишу следующую рекурсивную лямбда-функцию, но она не компилируется.
sum.cpp
#include <iostream>
#include <functional>
auto term = [](int a)->int {
return a*a;
};
auto next = [](int a)->int {
return ++a;
};
auto sum = [term,next,&sum](int a, int b)mutable ->int {
if(a>b)
return 0;
else
return term(a) + sum(next(a),b);
};
int main(){
std::cout<<sum(1,10)<<std::endl;
return 0;
}
ошибка компиляции:
vimal @linux-718q: ~/Study/09С++/С++ 0x/lambda > g++ -std = С++ 0x sum.cpp
sum.cpp: В лямбда-функции:
sum.cpp: 18: 36: error: '((<lambda(int, int)>*)this)-><lambda(int, int)>::sum
не может использоваться как функция
версия gcc
gcc версия 4.5.0 20091231 (экспериментальная) (GCC)
Но если я изменяю объявление sum()
, как показано ниже, он работает:
std::function<int(int,int)> sum = [term,next,&sum](int a, int b)->int {
if(a>b)
return 0;
else
return term(a) + sum(next(a),b);
};
Может ли кто-нибудь пролить свет на это?