Как заставить работать 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++ не видит, но не понимаю как это может быть


Ответы (0 шт):