In this blog post, Eric Niebler states that:
What is wrong with std::begin and std::end? Surprise! they are not memory safe. Consider what this code does:
extern std::vector<int> get_data(); auto it = std::begin(get_data()); int i = *it; // BOOM
std::begin has two overloads for const and non-const lvalues. Trouble is, rvalues bind to const lvalue references, leading to the dangling iterator it above.
I'm having trouble understanding his point and why
it is a dangling reference.
Could someone explain ?