Вызов функции-члена this из универсальной лямбды - clang vs gcc
Выпуск: прохождение общего лямбда(к шаблонной функции) что захватываетthis
и вызывает функцию-членthis
без явногоthis->
не компилируется на gcc. Если лямбда не является универсальной или если лямбда не передается какой-либо другой функции, а вызывается на месте, она компилируется без явногоthis->
, Clang крут с кодом во всех ситуациях.
Время для следующего раундалязг против gcc, Кто прав?
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;
}
Сbar()
= call([this](auto x){ foo(x); });
лязг ++ 3.6+компилирует.g ++ 5.2+не компилируется.ошибка: невозможно вызвать функцию-член void Example :: foo (int) без вызова объекта ([this] (auto x) {foo (x);}); `
Сbar()
= call([this](auto x){ this->foo(x); });
лязг ++ 3.6+компилирует.g ++ 5.2+компилирует.Сbar()
= call([this](int x){ foo(x); });
лязг ++ 3.6+компилирует.g ++ 5.2+компилирует.Сbar()
= [this](auto x){ foo(x); }(1);
лязг ++ 3.6+компилирует.g ++ 5.2+компилирует.Почемуthis->
необходимо только в случае универсальной лямбды?
Почемуthis->
не нужно, если лямбда не передаетсяcall
?
Кто не соответствует стандартам?