C++ Lambda作为C++;11韩元';使用模板时不编译
我试图学习C++0x的一些基本方面,在编写一些代码时,我偶然发现了以下编译错误: (我使用的是4.8.2 gcc) test.hpp:24:29:错误:包含“struct project::C++ Lambda作为C++;11韩元';使用模板时不编译,c++,templates,c++11,lambda,C++,Templates,C++11,Lambda,我试图学习C++0x的一些基本方面,在编写一些代码时,我偶然发现了以下编译错误: (我使用的是4.8.2 gcc) test.hpp:24:29:错误:包含“struct project::”的类的模板参数的默认参数 下面是我要处理的代码片段 // case #1 template<class T = int> class Test { typedef std::function<void ()> Foo; ... public: Test(Foo const&
// case #1
template<class T = int> class Test {
typedef std::function<void ()> Foo;
...
public:
Test(Foo const& foo = [] () {}){ // this is line 24
}
...
};
//案例#1
模板类测试{
typedef std::函数Foo;
...
公众:
测试(Foo const&Foo=[](){}){//这是第24行
}
...
};
但让我疑惑的是,为什么下面的代码可以工作(如果前面的代码不能工作):
//案例2
模板类测试{
typedef std::函数Foo;
...
公众:
测试(Foo常量&Foo=0){
foo=[](){};
}
...
};
有人能解释为什么案例1不能编译而案例2能编译吗?我看不到的代码的其余部分在哪里。。也许可以尝试更新的编译器?我已经再次编译了gcc(来源:svn://gcc.gnu.org/svn/gcc/tags/gcc_4_8_2_release)但仍然会出现错误。如果它适用于您,您可以共享您的编译器版本吗?下面是一个简单的示例,说明为什么它允许分配给常量引用的
std::function
?
// case #2
template<class T = int> class Test {
typedef std::function<void ()> Foo;
...
public:
Test(Foo const& foo = 0){
foo = [] () {};
}
...
};