Подтвердить что ты не робот

Может ли встроенный лямбда-инициализатор захватить указатель 'this'?

Может ли инициализация элемента инициализации элемента lambda и использовать указатель this?

struct A{
  int a = 42;
  int b = [this](){
    return this->a * 4;
  }();
};

Действительно ли это код С++ 11 (согласно спецификации) или это просто расширение GCC?

Если это действительно так, почему я должен использовать this-> при обращении к элементу a?

4b9b3361

Ответ 1

Действительно ли это код С++ 11?

Нет. Только lambdas в области блока могут иметь списки захвата:

С++ 11 5.1.2/9 Лямбда-выражение, наименьшей границей которого является область видимости блока, является локальным лямбда-выражением; любое другое лямбда-выражение не должно иметь список захвата в своем лямбда-интродаторе.

Итак, похоже, это расширение GCC. (Как отмечается в комментариях, это открытая проблема, поэтому вполне может стать стандартным в один прекрасный день.)

почему я должен использовать this-> при обращении к элементу a?

У вас нет, по крайней мере, версии GCC, которую я использую: http://ideone.com/K857VC.