all tests passed!
数日に及ぶ調査と調整の結果、Borland 5.82とCodeWarrior 8.3でもRegression Testをすべてpassしました。
http://hamigaki.sourceforge.jp/status/
なお、Borland 5.82のvorbis_file_testはVC++8.0で作成したDLL(ogg,vorbis)を使用しています。
それにしてもBorland 5.82の挙動があまりにも奇妙で困りました。
例えば、
typedef boost::remove_reference<const int>::type other;
ならotherはconst intになるのですが、
template<class T> struct hoge { typedef typename boost::remove_reference<T>::type type; }; typedef hoge<const int>::type other;
だとintになるといった具合です。(もちろんconst intであるべきです)
最終的にmember_access_traitsはBorland用に特殊な(標準C++としては誤った)実装を用意することになりました。
CodeWarrior用の修正は、CRTP、多重継承、private継承などの組み合わせに起因するバグを回避したものです。条件は特定できていませんが、ICEになったり、基底クラスのポインタにstatic_castしたときに値がおかしかったりしました。
これらは、private継承を包含に変更して回避しています。継承より包含の方がコンパイラに優しいみたいです。
そんなこんなで、とりあえず疲れました、、、。