我正在尝试学习 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 可以吗?