1. int&可以bind到A::g中的a,因為a是lvalue2. int& b = foo1(5)違法是因為foo1(5)是prvalue (purervalue)3. foo2在C++20及以前都編得過,但是return的reference是dangle的,去印出來是未定義行為。C++23 P2266R3開始,a作為return的operand是xvalue,不能被bound to non-const lvalue reference,int&改成int&&或const int&才編得過。
http://wg21.link/P2266R3