Почему нельзя перегрузить оператор?
bool& operator [] (int index) {
    return selfVector[index];
  }
 должен статьstd::vector<bool>::reference operator [] (int index) {
    return selfVector[index];
  }
Напиши через темплейты