Tengo el siguiente escenario simplificado:error de sintaxis en la clase de plantilla con la expresión lambda
template< typename T>
struct A
{
A() : action_([&](const T& t) { })
{}
private:
boost::function< void(const T&)> action_;
};
Al compilar con Visual C++ 2010, me da un error de sintaxis en la construcción de action_:
1>test.cpp(16): error C2059: syntax error : ')'
1> test.cpp(23) : see reference to class template instantiation A<T>' being compiled
Lo que es extraño es que el mismo ejemplo, sin parámetro de plantilla, compila muy bien:
struct A
{
A() : action_([&](const int& t) { })
{}
private:
boost::function< void(const int&)> action_;
};
Sé que una solución al problema es mover la inicialización action_ en el cuerpo del constructor, en lugar de la lista de inicialización, como en el siguiente código:
template< typename T>
struct A
{
A()
{
action_ = [&](const T& t) { };
}
private:
boost::function< void(const T&)> action_;
};
... pero quiero evitar dicha solución.
¿Alguien encontró tal situación? ¿Hay alguna explicación/solución a este llamado error de sintaxis?
FWIW, el ejemplo proporcionado (después de corregir las compilaciones '# include' faltadas) sin previo aviso con G ++ 4.6.1. –
Es específico para Visual C++ 2010. –