vector::operator[]
neither yields a bool
nor a reference to a bool
. It just returns a little proxy object that acts like a reference. This is because there are no references to single bits and vector
actually stores the bool
s in a compressed way. So by using auto
you just created a copy of that reference-like object. The problem is that C++ does not know that this object acts as a reference. You have to force the "decay to a value" here by replacing auto
with T
.