質問というか素朴な疑問なのですが、
関数パラメータのデフォルト値に変数が使えない理由を知りたいです。

例えばブール変数をメンバに持ったクラスでトグル用のメンバ関数を定義するとき、
気持ち的には以下のようにしたいのです。

class my_bool {
public:
 bool elem;
 bool toggle(const bool& b!=elem) { // (*1)
  // 引数が指定されればelemを引数の値にセット
  // 引数が指定されなければelemを反転した値にセット
  elem = b;
  return elem;
 }
};

もちろんこれは(*1)のところでエラーがでます。
これが可能ならば上のような操作を簡潔に書けてハッピーなのですが、
デフォルト値に変数が使われると何かまずいことがあるのでしょうか?