Почему необязательный <T &> повторная привязка при назначении?

Продолжаются дебаты о том, чтоoptional а такжеvariant следует делать со ссылочными типами, особенно в отношении присвоения. Я хотел бы лучше понять дебаты вокруг этой проблемы.

optional<T&> opt;
opt = i;
opt = j; // should this rebind or do i=j?

В настоящее время принято решениеoptional<T&> плохо сформированы и делаютvariant::operator= плохо сформированный, если какой-либо из типов является ссылочным типом - чтобы обойти аргумент и при этом дать нам большую часть функциональности.

Какой аргумент, чтоopt = j должен перепривязать основную ссылку? Другими словами, почемудолжен мы реализуемoptional как это:

template <class T>
struct optional<T&> {
    T* ptr = nullptr;

    optional& operator=(T& rhs) {
        ptr = &rhs;
        return *this;
    }
};

Ответы на вопрос(1)

Ваш ответ на вопрос