Меня немного смущает предложение в стандарте (я смотрю черновик n4849 для C++20, §7.5.5.2 - 11, т.е. [expr.prim.lambda.capture.6], а также https ://eel.is/c++draft/expr.prim.lambda.capture), о том, какое id-выражение относится к составному оператору лямбда-выражения.
Он гласит:
Каждое выражение идентификатора в составном операторе лямбда-выражения, которое является использованием odr объекта, захваченного копией, преобразуется в доступ к соответствующий безымянный элемент данных типа замыкания.
[Примечание: выражение идентификатора, которое не является использованием odr относится к исходной сущности, а не к члену типа замыкания. Однако такое выражение идентификатора все равно может вызвать неявный захват объекта. — конец примечания]
Если *это фиксируется копией, каждое выражение, которое использует odr-*это, преобразуется в < strong>вместо относятся к соответствующему безымянному элементу данных типа замыкания.
Мой вопрос: почему «вместо» в последнем абзаце?
У меня такое ощущение (единственное с точки зрения грамматики), что в последнем абзаце часть «который использует odr» следует удалить, так как это придало бы смысл слову «вместо» по сравнению с общим случаем, когда доступ к элементу данных происходит только в случае использования odr (1-й абзац), в противном случае указывается исходный объект (2-й абзац).
Или другая интерпретация заключается в том, что «вместо» относится к более общему термину «выражение». по сравнению с «id-выражением», но в этом случае мой вопрос переключается на «чего требует стандарт в отношении неиспользования *this?»
Подробнее здесь: https://stackoverflow.com/questions/783 ... atement-of
Стандартная (не)фраза C++ о неиспользовании *this в составном операторе лямбда-выражения ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение