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