Получение ссылки по ссылке в лямбде C ++ 11

Учти это:

#include <functional>
#include <iostream>

std::function<void()> make_function(int& x) {
    return [&]{ std::cout << x << std::endl; };
}

int main() {
    int i = 3;
    auto f = make_function(i);
    i = 5;
    f();
}

Эта программа гарантированно выведет5 без вызова неопределенного поведения?

Я понимаю, как это работает, если я фиксируюx по значению ([=]), но я не уверен, что вызываю неопределенное поведение, захватывая его по ссылке. Может ли быть так, что я получу висячую ссылку послеmake_function возвращает, или гарантированная работа захваченной ссылки будет работать до тех пор, пока объект исходной ссылки все еще там?

Ищите здесь конкретные основанные на стандартах ответы :) На практике это работает достаточно хорошодо сих пор ;)

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

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