0

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

(我使用的是 4.8.2 gcc)

test.hpp:24:29:错误:包含'struct project::<lambda>'</p>的类的模板参数的默认参数

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

// 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 可以吗?

4

0 回答 0