私は、次の簡略化のシナリオがあります。構文エラー
1>test.cpp(16): error C2059: syntax error : ')'
1> test.cpp(23) : see reference to class template instantiation A<T>' being compiled
:
template< typename T>
struct A
{
A() : action_([&](const T& t) { })
{}
private:
boost::function< void(const T&)> action_;
};
のVisual C++ 2010でコンパイルする、それは私にaction_の建設で構文エラーを与えるが奇妙なのは、テンプレートパラメータを持たない同じ例がちょうど良いコンパイルであることです。
struct A
{
A() : action_([&](const int& t) { })
{}
private:
boost::function< void(const int&)> action_;
};
私はこの問題への1つの回避策は、以下のコードのように、代わりに初期化リストの、コンストラクタ本体にaction_の初期化を移動させることであることを知っている:
template< typename T>
struct A
{
A()
{
action_ = [&](const T& t) { };
}
private:
boost::function< void(const T&)> action_;
};
...しかし、私は、このような回避策を避けたいです。
誰もこのような状況に遭遇しましたか?このような構文エラーと呼ばれる説明/解決策はありますか?
FWIWは、G ++ 4.6.1で警告なしでコンパイルします。 –
これはVisual C++ 2010に固有です。 –