記憶が朧げに蘇ってきそうなよ〜なそーでもないよ〜な…

mcpp の document に目を通したけど、## については xglue () [↓でいう CAT()] が「よくある手」となってるだけで、特に buggy ではないらしい。件の macro 群を書いてたときには「評価」とか基礎的な概念の理解が固まってなかったから、単純に馬鹿だったという事も十分考えられる。ので、明日学校の PC の VC++ で再現できなければ使うことにした。

追記: 普通に思惑通り展開されました。勘違いだったっぽい。

ところで。SCM_ASSERT() から #cond が消されてて、これが非常ーに不便なわけだけど、

#define SCM_ASSERT_TYPE(cond, o) (SCM_ASSERT(cond), (o))

となってるのを

#define SCM_ASSERT_TYPE SCM_ASSERT

に変更すると引数の条件式が stringize の前に

((tail))))->obj.cons.car + 0))))))->obj.cons.cdr + 0))))->attr.v.type) == ScmInt)

みたいなのに展開されるのは防げるんではないかな。mcpp は function-like macro の名前を object みたいに使うことに批判的だけど、こういうときに要るんだよね。