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;
}
};