http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49022
--- Comment #23 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-06-14 13:50:56 UTC --- Ok, now I see, it's the operator[] of _BinBase which returns by value, I overlooked that. Thus, fine it seems confirmed that range-based for-loop itself is Ok, but making sure we have return by const ref everywhere for _Expr seems unmanageable. Thus, again, confirmed that I agree with removing the overloads.