見えない操作

C++演算子オーバーロードは内部を覆い隠して複雑な処理を単純な式評価だけで済むかの様に見せる。ふと、思いついてこんなコードを書いてみた。C++的な機能を無節操に使っている。main関数の中を見ただけではcounterに破壊的操作をしているようには見えない。パズルとしての面白さはあるけど、作法としては変換関数の中では型変換だけに留めるべきか?それとも有用な使い方があるだろうか。

#include 
using namespace std;

class CCounter {
private:
  int count;
public:
  CCounter(int count){
    this->count=count;
  }

  operator bool(){
    return --count >= 0;
  }
};

ostream& operator<<(ostream& os, CCounter& cc)
{
  return os << (cc ? "#t" : "#f");
}

int main(void){
  CCounter counter=3;
  cout << counter;
  cout << counter;
  cout << counter;
  cout << counter;
  cout << counter;
  return 0;
}