VariantからAnsiStringへの暗黙的キャストのバグ(?)
BDS2006でビルド出来ていた古いコードを引っ張り出して、C++Builder2007に食わせたら、こんなメッセージ。('A`)
[BCC32 エラー] OutputLog.cpp(155): E2031 'Variant' から 'AnsiString' へのキャストはできない
QCを調べたら、こんなものが。
AnsiString strValue ; Variant valValue; strValue = VarToStr(valValue); // OK!! (`・ω・´)シャキーン strValue = valValue; // OK!! (`・ω・´)シャキーン strValue = AnsiString(valValue); // Error!! (´・ω・`)ショボーン
VarToStrは変換関数だから問題ないけど、暗黙的キャストはOKで、明示的キャストは駄目ってのは一体どういうことなんだ?
気になって、dstring.hを調べてみたところ、確かに、Variantを引数に持つAnsiStringのコンストラクタはない。 ただ、sysvari.hには、"operator wchar_t*() const;"があるから、一旦、Variantがwchar_t*に暗黙的キャストされ、さらに、そのwchar_t*が暗黙的キャストでAnsiStringにキャストされると理解していいのかな・・・。 でも、当該部分のコードはBCB6とBDS2006ではコンパイル出来ていたから、CB2007になってコンパイラがの挙動が変わったってことか。
逆(AnsiString→Variant)は"Variant::Variant(const AnsiString& str)"が定義されているから、問題なし。