Допустимо ли привязывать неконстантные lvalue-ссылки к rvalue в C ++ 11? (Изменено)

Я знаю, что в c ++ 03 неконстантная ссылка не может быть связана с rvalue.

T& t = getT(); является недействительным, и в C ++ 11 мы можем сделать это:T&& t = getT(); но как насчет приведенного выше кода, это должно работать в C ++ 11?

Я проверил коды ниже с 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 это пользовательский класс, я нене понимаю, почему первые две строки компилируются.z разрушается в конце внутренней области видимости. Стандарт говорит что-нибудь об этом?

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

Ответы на вопрос(2)

Ваш ответ на вопрос