无法在C++中的模板初始化列表中使用lambda

aim*_*ozg 11 c++ lambda templates constructor c++11

我有一个带有std :: function构造函数参数的类.

class ClazzA{
public:
    ClazzA(function<void()> foo){}
    ClazzA(){
        ClazzA([](){});
    }
};
Run Code Online (Sandbox Code Playgroud)

如果我有一个这个类的实例作为另一个的成员,我必须在初始化列表中调用构造函数.我可以传递一个lambda作为参数,它会自动转换:

class ClazzB{
public:
    ClazzA a;
    ClazzB() :
      // works fine:
      a([](){}){}
};
Run Code Online (Sandbox Code Playgroud)

但是如果ClazzB是模板,lambda不起作用:

template<typename T> class ClazzC{
public:
    ClazzA a;
    //works fine:
    ClazzC(function<void()> foo) : a(foo){}
    //doesn't work:
    ClazzC() :
      //syntax error : ')'
      a([](){})
      //syntax error : '{'
      //unexpected token(s) preceding '{'; skipping apparent function body
      {}
};
Run Code Online (Sandbox Code Playgroud)

编译器是MSVC++ 2010.我不明白我做错了什么或为什么不支持这种语法.

起初ClazzA也是一个模板,功能有点复杂,所以我认为这是模板化lambda或其他问题.但在我删除所有代码之后问题仍然存在.

UPD:尝试在MinGW G ++中编译,它可以工作.看起来像Visual Studio问题.

aim*_*ozg 2

这是一个 MSVS C++0x 实现问题(请参阅问题下的评论)。问题解决了。