У меня есть следующий упрощенный сценарий:
template< typename T>
struct A
{
A() : action_( [&]( const T& t) { })
{}
private:
boost::function< void( const T& )> action_;
};
При компиляции с Visual C ++ 2010 выдает синтаксическую ошибку при построении действия _:
1>test.cpp(16): error C2059: syntax error : ')'
1> test.cpp(23) : see reference to class template instantiation A<T>' being compiled
Что странно, тот же пример, без параметра шаблона, компилируется просто отлично:
struct A
{
A() : action_( [&]( const int& t) { })
{}
private:
boost::function< void( const int& )> action_;
};
Я знаю, что одним из способов решения этой проблемы является перемещение инициализации action_ в теле конструктора вместо списка инициализации, как показано в коде ниже:
template< typename T>
struct A
{
A()
{
action_ = [&]( const T& t) { };
}
private:
boost::function< void( const T& )> action_;
};
... но я хочу избежать такого обходного пути.
Кто-нибудь сталкивался с такой ситуацией? Есть ли объяснение / решение этой так называемой синтаксической ошибки?