статус-кво
Это обсуждалось, когда лямбда Инициализационные-захваты были добавлены к языку. В настоящее время рабочий проект стандарта (N3797) говорит (в [expr.prim.lambda] p11):
Для каждого INIT-захвата нестатический элемент данных назван идентификаторомinit-capture объявлен в типе замыкания.
Стандарт делает не указать доступ этого пользователя, что делает его неясно, будет ли это справедливо:
auto x = [n(0)] {};
int k = x.n; // ok?
Это и некоторые другие проблемы спецификации с Init-захватами привели к национальному органу комментарий GB3 о стандартном проекте, который обрабатывается рабочей группой ядра C++ как core issue 1760.При обсуждении этого вопроса основная рабочая группа решила, что инициативных записей должно быть , а не быть доступными членами объекта замыкания.
Разрешение на выпуск 1760 (который утвержден РГС, но еще не в полной комиссии) изменяет спецификацию вместо сказать:
INIT захвата ведет себя так, как будто он объявляет и явно захватывает переменная формы “auto init-capture ;”
которой декларативный область является лямбда-выражение «s соединение-оператор [...]
Этот новый ш ording дает понять, что начальный захват не добавляет именного элемента закрывающего объекта, а вместо него действует как любой другой захват лямбды.
Как расширения языка
Making Init-захватам быть доступными членами типа закрытия, конечно, можно (и моя первоначальная реализация Init-захватов в звоне сделал это, прежде чем я реализован решение вопроса 1760). Это также похоже на полезную функцию, но это также позволило бы нарушить инкапсуляцию лямбда-выражений в обычном случае, когда начальные записи не должны быть видимыми.
* «AFAIK, C++ 11/14 не позволяет определять на месте определение нового типа при определении лямбда». * Что вы имеете в виду? Внутри лямбда-захвата или внутри лямбда-тела? – dyp
Я хочу сказать больше, как новый тип возврата. – Sumant
AFAIK, есть анонимные локальные классы в C++ 'vector words = {" Stack "," Overflow "}; struct {decltype (words) w; } l {words}; cout << lw [0]; '[Live example] (http://coliru.stacked-crooked.com/a/95fc5770a6a0036d) –
dyp