This code will always work:
const auto &const_reference = some_object; assert(&const_reference == &some_object);
The actual code that doesn't work is actually like this:
const auto &oc = ai->var_infos[var_id].occurences[0]; assert(&oc == &ai->var_infos[var_id].occurences[0]);
This does not work because you are overloading operator[] :
See MyArrays.hpp:
T operator[](size_t i) const { assert(size >= 0); assert(i < size && i >= 0); return items[i]; }
This returns a copy on every call.
This should probably be:
const T& operator[](size_t i) const { assert(size >= 0); assert(i < size && i >= 0); return items[i]; }
source share