BorlandDeveloperStudio2006 の C++Builder で vcl と ATL を混在するとコンパイルエラーが出る件

C++Builder6J で作りかけの DirectShow アプリを BorlandDeveloperStudio2006 にインポートするとコンパイルエラーが出て悩まされましたが、原因がわかったのでメモっておきます。

再現方法ですが、以下のようにコンソールアプリのプロジェクトを生成して、atlbase.h の include を追加します。

//---------------------------------------------------------------------------

#include 
#pragma hdrstop

#include 

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
	return 0;
}
//---------------------------------------------------------------------------

これをコンパイルすると、以下のようなエラーが出ます。(プロジェクトオプションの C++コンパイラ(bcc32)->コンパイル で拡張コンパイルエラー情報を ON にしています)

[C++ エラー] atlbase.h(4569): E2015 '__stdcall VarCmp(tagVARIANT *,tagVARIANT *,unsigned long)' と 'Varutils::VarCmp' の区別が曖昧
  詳細な解析情報
    UnitMain.cpp(18): #include C:\Users\tomotaco-doga\tomotaco_work\svn-work\apps\ConcatenateMovie\Application\UnitMain.h
    UnitMain.h(23): #include c:\program files\borland\bds\4.0\include\atl/atlbase.h
    atlbase.h(292): namespace ATL
    atlbase.h(4233): class CComVariant
    atlbase.h(4640): 具体化対象の選択:bool CComVariant::operator <(const tagVARIANT &) const
    --- 具体化のため構文解析を初期化しました
    atlbase.h(4569): 構文解析対象:bool CComVariant::operator <(const tagVARIANT &) const

これの原因は atl/atlbase.h にあるようです。このヘッダで定義されている CComVariants クラスに以下のようなオペレータがありますが、

	bool operator<(const VARIANT& varSrc) const {return VarCmp((VARIANT*)this, (VARIANT*)&varSrc, LOCALE_USER_DEFAULT)==VARCMP_LT;}
	bool operator>(const VARIANT& varSrc) const {return VarCmp((VARIANT*)this, (VARIANT*)&varSrc, LOCALE_USER_DEFAULT)==VARCMP_GT;}

これが oleauto.h で定義されている ::VarCmp() か vcl の VarUtils::VarCmp()のどちらを挿すのかがわからへん、というエラーです。
VarUtils::VarCmp() は今回のバージョンで追加された部分なので、C++Builder6J ではこの問題は起きません。
対策として、atl/atlbase.h の上記該当場所の VarCmp を ::VarCmp にして VarUtils 側を見ないようにすれば、コンパイルは通りました。

今回のバージョンから QualityCentral でバグレポートが出せるようなので報告してみようかと考えていますが、エラーメッセージを英訳せなあきませんね…。(コンパイル時のメッセージを英語にするようなオプションってありましたっけ…)

(21:11 追記) 適当に英訳して投稿してみました。(#25488) ちょっとドキドキ…。