相关疑难解决方法(0)

在C++ 11中用"auto"推导出lambda的类型是什么?

我有一种感觉,lambda的类型是一个函数指针.当我进行以下测试时,我发现它是错误的(演示).

#define LAMBDA [] (int i) -> long { return 0; }
int main ()
{
  long (*pFptr)(int) = LAMBDA;  // ok
  auto pAuto = LAMBDA;  // ok
  assert(typeid(pFptr) == typeid(pAuto));  // assertion fails !
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是否缺少任何一点?如果不是那么,typeofauto关键字推导出的lambda表达式是什么?

c++ lambda typeof auto c++11

129
推荐指数
4
解决办法
3万
查看次数

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

我在使用英特尔编译器中的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版本.

有没有解决的办法?

提前感谢您的帮助

c++ lambda intel

6
推荐指数
1
解决办法
2267
查看次数

标签 统计

c++ ×2

lambda ×2

auto ×1

c++11 ×1

intel ×1

typeof ×1