Ограничение явного параметра объекта в лямбда-выражении с захватом ⇐ C++
Ограничение явного параметра объекта в лямбда-выражении с захватом
В C++23 лямбда-выражение поддерживает явный параметр объекта (так называемый «вывод этого»). Я обнаружил странное ограничение для лямбды при захвате в [expr.prim.lambda]/p5.
Для лямбды с лямбда-захватом тип явного параметра объекта, если таковой имеется, оператора вызова функции лямбды (возможно, созданного из шаблона оператора вызова функции) должен быть следующим:
[*]тип закрытия, [*]тип класса, производный от типа замыкания, или [*]ссылка на возможно такой тип с указанием cv.
[Пример 2:
struct C { шаблон С(Т); }; void func(int i) { int x = [=](this auto&&) { return i; }(); // ХОРОШО int y = [=](this C) { return i; }(); // ошибка int z = [](this C) { return 42; }(); // ХОРОШО } -- конец примера]
Вопрос: почему такое ограничение существует только для лямбда-выражений с захватом? Есть ли проблемы с реализацией?
В C++23 лямбда-выражение поддерживает явный параметр объекта (так называемый «вывод этого»). Я обнаружил странное ограничение для лямбды при захвате в [expr.prim.lambda]/p5.
Для лямбды с лямбда-захватом тип явного параметра объекта, если таковой имеется, оператора вызова функции лямбды (возможно, созданного из шаблона оператора вызова функции) должен быть следующим:
[*]тип закрытия, [*]тип класса, производный от типа замыкания, или [*]ссылка на возможно такой тип с указанием cv.
[Пример 2:
struct C { шаблон С(Т); }; void func(int i) { int x = [=](this auto&&) { return i; }(); // ХОРОШО int y = [=](this C) { return i; }(); // ошибка int z = [](this C) { return 42; }(); // ХОРОШО } -- конец примера]
Вопрос: почему такое ограничение существует только для лямбда-выражений с захватом? Есть ли проблемы с реализацией?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Издевающийся объект, вызываемый в лямбда-выражении, вызванный из издевающегося объекта
Anonymous » » в форуме JAVA - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Издевающийся объект, вызываемый в лямбда-выражении, вызванный из издевающегося объекта
Anonymous » » в форуме JAVA - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-