I found this error and I just can't understand why it happens. I want to use a range-for to reset all the elements in a vector. The code below works for vector<int>
but gives me a compilation error for vector<bool>
.
Code:
#include <iostream>
#include <vector>
int main(){
std::vector<int> vi (10,1);
for(int &i : vi)
i = 0;
std::vector<bool> vb (10,1);
for(bool &b : vb)
b = 0;
return 0;
}
Compilation output:
test.cc: In function ‘int main()’:
test.cc:11:17: error: cannot bind non-const lvalue reference of type ‘bool&’ to an rvalue of type ‘bool’
11 | for(bool &b : vb)
| ^~
In file included from /usr/include/c++/9.3.0/vector:68,
from test.cc:2:
/usr/include/c++/9.3.0/bits/stl_bvector.h:86:5: note: after user-defined conversion: ‘std::_Bit_reference::operator bool() const’
86 | operator bool() const _GLIBCXX_NOEXCEPT
| ^~~~~~~~