私は 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がコンパイルされる理由を誰かが説明できますか?