c++ - std::function<> 和 Intel 编译器版本 11.1

标签 c++ lambda intel

我在使用英特尔编译器中的 lambda 函数时遇到问题,特别是以下代码无法编译:

template<typename T>
std::function<T (int)>  make_func(T x) {
  return [=](int index) -> T
  {
     return x;
  };
}

我得到的错误是

error: namespace "std" has no member "function"

代码在我的 Mac 上编译和运行良好(macports gcc 版本 4.5)。错误在起作用,我们使用的是 Intel 编译器版本 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);

工作时安装的gcc版本是4.1.2,所以我猜标准库是旧的?

/bin/libc.so.6

说它是用 gcc 4.1.2 编译的 2.5 版。

有解决办法吗?

在此先感谢您的帮助

最佳答案

我在安装了 gcc 4.5.2 的系统上使用 icc 11.1 得到了相同的行为。

g++的标题 <functional>#ifdef __GXX_EXPERIMENTAL_CXX0X__ 保护icc 时未定义被使用。

我会考虑切换到 boost::function在此设置中,当然可以与 icc 配合使用。

关于c++ - std::function<> 和 Intel 编译器版本 11.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6527064/

相关文章:

c++ - 如果我使用 lambda 而不是 If block ,是否会有性能损失?

c++ - lambda : GCC bug and/or Clang bug? 中捕获变量的 decltype()

c - int32_t : gcc/linux 86 vs amd64 的对齐要求

英特尔 CPU 上的 OpenCL 管道

c++ - 最小 "extern"使用测试用例的未定义​​引用问题

c++ - 原始图像和调整后图像之间的关系 (C++/OpenCV)

c++ - 为什么C/C++会自动将char/wchar_t/short/bool/enum类型转换为int?

c++ - 将 lambda 与 Boost Beast 一起使用而不是绑定(bind)

c++ - "Ignore specific library"在 Visual Studio 中的影响

c++ - for 循环结束自身并终止正在运行的程序,但在删除斜率计算语句时正确运行