Chamando a função de membro `this` do lambda genérico - clang vs gcc
Questão: passando um lambda genérico(para uma função de modelo) que capturathis
e chama uma função membro dethis
sem um explícitothis->
não compila no gcc. Se o lambda não for genérico, ou se o lambda não for passado para nenhuma outra função, mas chamado no lugar, ele compila sem um comando explícito.this->
. Clang é legal com o código em todas as situações.
Hora de outra rodada declang vs gcc. Quem está certo?
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;
}
Combar()
= call([this](auto x){ foo(x); });
clang ++ 3.6+compila.g ++ 5.2+não compila.erro: não é possível chamar a função de membro 'void Example :: foo (int)' sem chamada de objeto ([this] (auto x) {foo (x);}); `
Combar()
= call([this](auto x){ this->foo(x); });
clang ++ 3.6+compila.g ++ 5.2+compila.Combar()
= call([this](int x){ foo(x); });
clang ++ 3.6+compila.g ++ 5.2+compila.Combar()
= [this](auto x){ foo(x); }(1);
clang ++ 3.6+compila.g ++ 5.2+compila.Porque é othis->
necessário apenas no caso de um lambda genérico?
Porque é othis->
não é necessário se o lambda não for passado paracall
?
Quem não está em conformidade com os padrões?