带有lambda表达式的模板类中的语法错误

时间:2011-10-19 16:07:38

标签: c++ c++11 visual-c++-2010 lambda

我有以下简化方案:

template< typename T>
struct A
{
  A() : action_( [&]( const T& t) { })
  {}

private:
   boost::function< void( const T& )> action_;
};

使用Visual C ++ 2010进行编译时,在构造action _时会出现语法错误:

1>test.cpp(16): error C2059: syntax error : ')'
1>          test.cpp(23) : see reference to class template instantiation A<T>' being compiled

奇怪的是,同样的例子,没有模板参数,编译得很好:

struct A
{
  A() : action_( [&]( const int& t) { })
  {}

private:
  boost::function< void( const int& )> action_;
};

我知道问题的一个解决方法是在构造函数体中移动action_初始化,而不是初始化列表,如下面的代码所示:

template< typename T>
struct A
{
  A()
  {
    action_ = [&]( const T& t) { };
  }

private:
  boost::function< void( const T& )> action_;
};

...但我想避免这种解决方法。

有人遇到过这样的情况吗?是否有任何解释/解决这种所谓的语法错误?

1 个答案:

答案 0 :(得分:1)

在Visual C ++ 2010中破坏Lambda的实现?这是我对解释的最佳猜测。

尽管如此,我很感兴趣的是通过引用捕获范围变量在这种情况下做什么......没什么?