というわけで、正解はこちら。

#define _TOSTRING(x) (#x)
#define _THRU(x) _TOSTRING(x)
#define TODO(x) message( __FILE__ "(" _THRU(__LINE__) ") message: " x )

間に一つ何もしないマクロをはさむことにより数値展開された上で文字列化されます。
コンパイラのプリプロセッサ内部で構文解析木を作るときに、一度記号表へ入れられるか
直接処理されるか、その内部構造の隙間を利用したトリックですね。
種明かししてしまうと簡単なんだけど、このコードはそこそこ気に入っています。
(ただ手元にソースが無いので、思い出しながら書いているので間違っていたらごめんなさい)