在使用模板时,Lambda作为C ++ 11中的默认构造函数参数将无法编译

时间:2013-11-10 18:32:23

标签: c++ templates c++11 lambda

我正在尝试学习C ++ 0x的一些基本方面,在编写一些代码时,我偶然发现了以下编译错误:

(我使用的是4.8.2 gcc)

  

test.hpp:24:29:error:包含'struct project ::<的类的模板参数的默认参数拉姆达>”

以下是我正在尝试处理的代码。

// case #1
template<class T = int> class Test {
 typedef std::function<void ()> Foo;
 ...
 public:
  Test(Foo const& foo = [] () {}){ // this is line 24
       }
     ...
    };

但令我惊讶的是为什么以下代码有效(如果以前的代码没有):

// case #2
template<class T = int> class Test {
 typedef std::function<void ()> Foo;
 ...
 public:
   Test(Foo const& foo = 0){
     foo = [] () {};
   }
 ...
};

有人可以解释为什么案例#1不编译而#2没有?

0 个答案:

没有答案