SWIGとRubyとC++と
C++のコードをSWIG使ってRubyに混ぜ混ぜしようとすると、特にVC++では
「マクロ writeの引数が少なすぎます」
などなどとコンパイラが激しくぶーたれてくれる。
……というのも、rubyのwin32.hで
#define read(f, b, s) rb_w32_read(f, b, s)
#define write(f, b, s) rb_w32_write(f, b, s)
とやっていて、この定義がC++ライブラリのiostream系のメンバ関数と衝突してくれている。
……って、VC++はCランタイムにreadもwriteもないぢゃんもともとorz
(あるのは_readと_write。ANSI Cの範囲外だから頭に_付けてんだろう)
そんなわけで、win32.hの相当部分を_付きに書き換えてやると
ちょっとしわよせもといしやわせになれます。