Por que <T &> opcional deve religar na atribuição?

Há um debate em andamento sobre o queoptional evariant deve fazer com tipos de referência, particularmente com relação à atribuição. Eu gostaria de entender melhor o debate em torno desta questão.

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

Atualmente, a decisão é tomaroptional<T&> mal formado e fazervariant::operator= mal formado se algum dos tipos for um tipo de referência - para contornar o argumento e ainda nos fornecer a maior parte da funcionalidade.

Qual é o argumento de queopt = j devemos religar a referência subjacente? Em outras palavras, por quedevemos nós implementamosoptional como isso:

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

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

questionAnswers(1)

yourAnswerToTheQuestion