Calling `this` Mitglied Funktion von generischen Lambda - clang vs gcc

Problem vorbei an einem generischen Lambda (zu einer Vorlagenfunktion) das erfasstthis und ruft eine Mitgliedsfunktion von @ athis ohne ein explizitesthis-> kompiliert nicht auf gcc. Wenn das Lambda nicht generisch ist oder wenn das Lambda nicht an eine andere Funktion übergeben wird, sondern an Ort und Stelle aufgerufen wird, wird es ohne ein explizites @ kompilierthis->. Clang ist cool mit dem Code in allen Situationen.

Zeit für eine weitere Rundeclang vs gcc. Wer hat Recht?

Wandbox Beispiel

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;
}
Mitbar() = call([this](auto x){ foo(x); }); clang ++ 3.6+ kompiliert. g ++ 5.2+kompiliert nicht.

Fehler: Member-Funktion 'void Example :: foo (int)' kann nicht ohne Objektaufruf aufgerufen werden ([this] (auto x) {foo (x);});

Mitbar() = call([this](auto x){ this->foo(x); }); clang ++ 3.6+ kompiliert. g ++ 5.2+ kompiliert.Mitbar() = call([this](int x){ foo(x); }); clang ++ 3.6+ kompiliert. g ++ 5.2+ kompiliert.Mitbar() = [this](auto x){ foo(x); }(1); clang ++ 3.6+ kompiliert. g ++ 5.2+ kompiliert.

Warum ist derthis-> nur im Falle eines generischen Lambda notwendig?

Warum ist derthis-> nicht erforderlich, wenn das Lambda nicht an @ übergeben wicall?

Wer ist nicht standardkonform?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage