Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Lambda作为C++;11韩元';使用模板时不编译_C++_Templates_C++11_Lambda - Fatal编程技术网

C++ Lambda作为C++;11韩元';使用模板时不编译

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&

我试图学习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& 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 = [] () {};
   }
 ...
};