我在使用英特尔编译器中的lambda函数时遇到问题,特别是以下代码无法编译:
template<typename T>
std::function<T (int)> make_func(T x) {
return [=](int index) -> T
{
return x;
};
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
error: namespace "std" has no member "function"
Run Code Online (Sandbox Code Playgroud)
代码在我的Mac上编译并运行良好,(macports gcc version 4.5).错误在起作用,我们使用英特尔编译器版本11.1.它接受lambda函数(使用-std = c ++ 0x选项),例如:
auto lam = [=](int j) -> int {
printf("testing for lambdas: %d\t%d\n", n, j);
return n;
};
int g = lam(7);
Run Code Online (Sandbox Code Playgroud)
工作中安装的gcc版本是4.1.2,所以我猜测标准库已经老了?
/bin/libc.so.6
Run Code Online (Sandbox Code Playgroud)
说这是用gcc 4.1.2编译的2.5版本.
有没有解决的办法?
提前感谢您的帮助
我在安装了gcc 4.5.2的系统上使用icc 11.1获得了相同的行为.
g++
标头<functional>
受保护,使用#ifdef __GXX_EXPERIMENTAL_CXX0X__
时未定义标头icc
.
我会考虑在这个设置中切换到boost :: function,这当然适用于icc.