Llamar a la función miembro `this` desde lambda genérico - clang vs gcc
Problema: pasando una lambda genérica(a una función de plantilla) que capturathis
y llama a una función miembro dethis
sin un explícitothis->
no se compila en gcc. Si el lambda no es genérico, o si el lambda no se pasa a ninguna otra función pero se llama en su lugar, se compila con un comando explícitothis->
. Clang es genial con el código en todas las situaciones.
Tiempo para otra ronda declang vs gcc. ¿Quién tiene la razón?
template<typename TF>
void call(TF&& f)
{
f(1);
}
struct Example
{
void foo(int){ }
void bar()
{
call([this](auto x){ foo(x); });
}
};
int main()
{
Example{}.bar();
return 0;
}
Conbar()
= call([this](auto x){ foo(x); });
clang ++ 3.6+compila.g ++ 5.2+no compilaerror: no se puede llamar a la función miembro 'void Ejemplo :: foo (int)' sin llamada al objeto ([this] (auto x) {foo (x);}); `
Conbar()
= call([this](auto x){ this->foo(x); });
clang ++ 3.6+compila.g ++ 5.2+compilaConbar()
= call([this](int x){ foo(x); });
clang ++ 3.6+compila.g ++ 5.2+compilaConbar()
= [this](auto x){ foo(x); }(1);
clang ++ 3.6+compila.g ++ 5.2+compilaPorque es elthis->
necesario solo en el caso de una lambda genérica?
Porque es elthis->
no es necesario si la lambda no se pasa acall
?
¿Quién no cumple con los estándares?