¿Es válido vincular referencias de valores no constantes a valores r en C ++ 11? (Modificado)

Sé que en c ++ 03, una referencia no constante no puede vincularse a rvalues.

T& t = getT(); es inválido, y en c ++ 11, podemos hacer esto:T&& t = getT(); pero ¿qué pasa con el código anterior, debería funcionar en c ++ 11?

He probado los siguientes códigos con vs11:

 Foo getFoo() {
  return Foo();
}

void fz(Foo& f) {
}

int getInt() {
  return int();
}

void iz(int& i) {
}

int main() {
  {
    Foo& z = getFoo(); //ok
    fz(getFoo()); //ok

    int& z2 = getInt(); //error: initial value of reference to non-const must be an lvalue
    iz(getInt()); //same as above
  }
}

Foo es una clase personalizada, no entiendo por qué se compilan las dos primeras líneas. El temporal al que hace referenciaz Se destruye al final del ámbito interno de main. ¿El estándar dice algo sobre esto?

class Foo {
public:
  Foo() {
    std::cout << "constructed\n";
  }
  ~Foo() {
    std::cout << "destructed\n";
  }
};

Acabo de ver una pregunta similar:Un error VS2010? ¿Permitir la vinculación de una referencia no constante a rvalue SIN AÚN una advertencia?

Respuestas a la pregunta(2)

Su respuesta a la pregunta