Por que uma referência não-const não pode se ligar a um objeto temporário?

Por que não é permitido obter referência não-const a um objeto temporário, cuja funçãogetx() retorna? Claramente, isso é proibido pela C ++ Standard, mas estou interessado no propósito de tal restrição,não é uma referência para o padrão.

struct X
{
    X& ref() { return *this; }
};

X getx() { return X();}

void g(X & x) {}    

int f()
{
    const X& x = getx(); // OK
    X& x = getx(); // error
    X& x = getx().ref(); // OK
    g(getx()); //error
    g(getx().ref()); //OK
    return 0;
}
É claro que a vida útil do objeto não pode ser a causa, porque a referência constante a um objeto énão proibido pelo padrão C ++.É claro que o objeto temporário não é constante na amostra acima, porque as chamadas para funções não constantes são permitidas. Por exemplo,ref() poderia modificar o objeto temporário.Além do que, além do mais,ref() permite enganar o compilador e obter um link para este objeto temporário e que resolve o nosso problema.

Além do que, além do mais:

Eles dizem que "atribuir um objeto temporário à referência const estende a vida útil desse objeto" e "Nada é dito sobre referências não-const embora". Minhaspergunta adicional. A seguinte atribuição estende a vida útil do objeto temporário?

X& x = getx().ref(); // OK

questionAnswers(11)

yourAnswerToTheQuestion