Visual Studio中嵌套的lambdas

时间:2013-02-09 14:40:41

标签: c++ c++11 lambda visual-studio-2012

我正在尝试在Visual Studio 2012中保存嵌套的lambda函数。

class Wrap
{
public:
  typedef function<void(Wrap*)> Method;
  Method method;
  std::map<string, Wrap> methods;
};

Wrap x;
x.method = [](Wrap *arg) {
    Wrap::Method t = [](Wrap*) {};
    arg->methods["child"].method = t;
};

产生此错误:

  

错误C2678:二进制'<':找不到哪个运算符采用const std::string类型的左侧操作数(或者没有可接受的转换)

我不能对这个错误做出正面或反面。

我用g ++和clang测试了这个。他们可以编译它。 http://liveworkspace.org/code/4kVlUY$72

我如何让Visual Studio编译它?任何解决方法?

2 个答案:

答案 0 :(得分:4)

问题与您的期望完全无关:

#include <string>

解决它。似乎比较运算符需要显式包含<string>,而如果仅包含<map>则定义类本身。

答案 1 :(得分:1)

您的代码可以使用GCC 4.7.2,Clang 3.2,ICC 13.0.1编译。

如果#include <string>标题,你在LiveWorkSpace上发布的示例中省略了它,那么它在VC10上编译也很好。

可能stdlibc ++实现包含来自您直接#include的其他头文件的头文件,而MS的C ++标准库实现则不是这样。

尝试添加#include指令,问题就会消失。