Хорошие новости! В clang 18 наконец-то реализовали P0847R7 Deducing this. Однако пока что только в экспериментальном режиме: макрос
__cpp_explicit_this_parameter в этом версии установлен не былЧто это нововведение нам даёт? Если раньше мы хотели реализовать один метод с четырьмя разными ref-квалификаторами, то нам приходилось так или иначе писать практически один и тот же код четырежды. (см. пикрелейтед)
Теперь же мы можем избежать необходимости подобного дублирования, подчинив для этого привычный механизм выведения типов:
template <typename Self>
constexpr auto&& value(this Self&& self) {
if (!self.has_value()) {
throw bad_optional_access();
}
return forward<Self>(self).m_value;
}
Более подробно про deducing this в статье по ссылке
