Warum sollte optional <T &> bei Zuweisung neu gebunden werden?

Es gibt eine anhaltende Debatte darüber, wasoptional undvariant sollte mit Referenztypen zu tun haben, insbesondere im Hinblick auf die Zuweisung. Ich möchte die Debatte zu diesem Thema besser verstehen.

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

erzeit ist die Entscheidung zu treffen,optional<T&> schlecht geformt und machenvariant::operator= schlecht geformt, wenn einer der Typen ein Referenztyp ist - um das Argument zu umgehen und uns dennoch den größten Teil der Funktionalität zu geben.

Was ist das Argument, dassopt = j sollt die zugrunde liegende Referenz erneut binden? Mit anderen Worten, warumsollt wir implementierenoptional so was

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

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage