Как заставить работать deducing this в C++23?
Я только учусь C++ и дошел до такой штуки, как deducing this. Решил испытать ее на самописном optional, как делают это все, кто сталкиваются с данным топиком. Конкретно на функции value
.
Следующий код:
T& value() & {
if (!initialized) throw exc;
return reinterpret_cast<T&>(*_value);
}
const T& value() const & {
if (!initialized) throw exc;
return reinterpret_cast<const T&>(*_value);
}
T&& value() && {
if (!initialized) throw exc;
return reinterpret_cast<T&&>(*_value);
}
const T&& value() const && {
if (!initialized) throw exc;
return reinterpret_cast<const T&&>(*_value);
}
Я пытаюсь заменить на этот:
decltype(auto) value(this auto&& self) & {
if (!initialized) throw exc;
return reinterpret_cast<decltype(std::forward_like<decltype(self)>(std::declval<T>()))>(self._value);
}
Но когда я компилирую, то выдает ошибки: expected ',' or '...' before 'this'
, 'forward_like' is not a member of 'std'
. Компилирую C++23, не могу понять в чем проблема. Замена параметра auto на шаблон не помогает. Ощущение что у меня просто такой фичи g++ не видит, но не понимаю как это может быть