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継承を包含に変更して回避しています。継承より包含の方がコンパイラに優しいみたいです。


そんなこんなで、とりあえず疲れました、、、。