Кто-нибудь объяснит, почему ссылка стала недействительной после прохождения функции "identity", foo1
? Разве не "адрес" в A
передается и возвращается foo1
?
struct A {
A(int x) : x_(x) {}
int x_;
};
int main() {
function<const A&(const A& r)> foo1 = [](const A& r) {
return r;
};
vector<A> vec{1, 2, 3};
cout << foo1(vec[0]).x_ << endl; // RUNTIME ERROR
return 0;
}
Каким образом проблемная строка отличается от:
const A& r = vec[0];
const A& r1 = r;