Why do I get the error: invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘std::vector::reference {aka std::_Bit_reference}’?
<Normally, what you've assumed is the case, for literally any vector<T>
except vector<bool>
. The original C++98 standard specified that as a bit-packed vector, and so references to the individual elements are impossible.
This has since been recognized as an inconvenient mistake, but backward compatibility means that it can't be changed now.
That's because std::vector< bool >
is not what it looks like.
There's a specialization for std::vector
with type bool
- it's space optimized and uses a single bit for each element.
You can try to use uint8_t
or something like this, if you need this functionality. Or just return bool
, not bool&
.
The reference, returned by operator[]
is not a standard reference, but a proxy class, which complicates the things here.
There are a lot of similar questions about this here:
And others. Read more about std::vector< bool >
specialization.