C++23 «explicit object parameter» — мощь. Решили сделать zero-overhead геттер с идеальным пробросом самого объекта. На лайвах работает, в проде иногда мусор в строке.
struct Widget {
std::string name;
// отдаём name с тем же value-category, что и сам объект
auto&& title(this auto&& self) {
return std::forward<decltype(self)>(self).name;
}
};
const std::string& bad = Widget{"btn"}.title(); // ❓
std::println("{}", bad);Задача: объясни, какой ровно тип выводится у
title() при вызове на rvalue Widget, почему bad ссылается на уничтоженный объект, и где здесь lifetime extension НЕ срабатывает (и почему именно для deducing-this это особенно коварно). Как спроектировать API, чтобы компилятор ловил это?💬 Разбор — в комменты
📍Навигация: Вакансии • Задачи • Собесы • Канал в Max
Библиотека C/C++ разработчика
#междусобойчик