Something like this?

Code:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <limits>

template <typename iter>
bool increment(iter first, iter last,
               typename std::iterator_traits<iter>::value_type min = std::numeric_limits<typename std::iterator_traits<iter>::value_type>::min(),
               typename std::iterator_traits<iter>::value_type max = std::numeric_limits<typename std::iterator_traits<iter>::value_type>::max())
{
  while((first!=last) && (*first == max))
  {
    *first = min;
    ++first;
  };
  if(first!=last)
  {
    ++*first;
    return true;
  }
  return false;
}

int main()
{
  std::vector<char> vect(5); //vector<bool> is not a container
  do
  {
    std::copy(vect.rbegin(), vect.rend(), std::ostream_iterator<bool>(std::cout));
    std::cout << std::endl;
  }while(increment(vect.begin(), vect.end(), false, true));
}
outputs

Code:
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111