タプルの要素数を数える

世間では空前のプリプロセッサブームですね!
http://codepad.org/IwJ4sqA9
C++0xの規格を眺めていると、プリプロセッサのセクションに可変長引数リスト付きマクロが入っていたので、これを使って何か面白いことができないかと考えていたところ、タプルの要素数を数えることはできないだろうか、と思ったので、やってみた。gcc-4.3.3 -std=c++0x -E -Pで確認している。
タプルの要素数を数えるところはシンプルだけど、PP_IS_EMPTYはBoost.PPのものではなく、自家製。Boostのそれは、identifierか数値か空かしか識別できない(それぐらいだっけ?)。要素数不明のタプルを調べるには、いかなるトークンがコンマ区切りで何個きても識別できるようにする必要がある。で、これが異常に難しい。基本はBoostのものと同じだけど、間に挟まるトークンによって展開されたりされなかったりとか、対象のトークンに存在する括弧が誤爆したりしないようにして、あと意図したように展開させるために何段もラッパを挟んでいたりする。PP_IS_EMPTY_VIとPP_IS_EMPTY_VIIがよく分からない。これを挟まないとなぜかHELPER_IV_EMPTYも0,に展開されてしまう。謎い。