取用vector<bool> 的元素,提示是临时变量不能引用传参?

如果把bool改成int就不会报错,为什么要特意这么设计?
我还是第一次听说,大佬们这种情况都是怎么处理的。
取地址也试了,当然也是不被允许的,,,
void change(bool& n){
        if(n)n=0;
        else n=1;
}
int oddCells(int n, int m, vector<vector<int>>& indices) {
        vector<bool> r(n,0);
        vector<bool> c(m,0);
        for(vector<int> i:indices){
            change(r[i[0]]);//报错
            change(c[i[1]]);//报错
        }
        int a=num1(r);
        int b=num1(c);
        int result=a*m+b*n-a*b;
        return result;
}

报错信息

vector《bool》有其特殊性,不能算真正意义上的容器,他在底层为了减小存储空间,每一个bool值都是一位一位进行存储的,在节省空间的情况下会导致
最后的访问效率变低。由于这种特殊性,他的返回值比如r[0]是个右值,所以应当避免使用vector《bool》 如果对于存储空间要求没有这么高建议改成vector《int》
或者使用vector《BOOL》