D 2.067.0にて修正されました
環境:Windows
バージョン:2.065及び2.066.0-rc2
C++で書かれたライブラリ等を利用しようとした時に
extern(C++)と書くことでx64であれば
MSVC++でコンパイルされたlibやobjを直接リンクすることができますが
dmd側の名前修飾が正しくないのではないかと思います
extern(C++){
void fc2(wchar){}
void fc4(dchar){}
}
void fc2(wchar_t){}
test.cppのobj
cl 17.00.50727.1 (MSVC++) x86/x64
void fc2(wchar_t) ?fc2@@YAX_W@Z void __cdecl fc2(wchar_t) // msvc
dmc 8.42n x86
void fc2(wchar_t) ?fc2@@YAX_Y@Z void __cdecl fc2(wchar_t) // dmc
test.dのobj
dmd 2.065 x86/x64
void fc2(wchar) ?fc2@@YAX_Y@Z void __cdecl fc2(wchar_t) // dmc
void fc4(dchar) ?fc4@@YAXK@Z void __cdecl fc4(unsigned long)
dmd 2.066.0-rc2 x86
void fc2(wchar) ?fc2@@YAXG@Z void __cdecl fc2(unsigned short)
void fc4(dchar) ?fc4@@YAX_Y@Z void __cdecl fc2(wchar_t) // dmc
dmd 2.066.0-rc2 x64
void fc2(wchar) ?fc2@@YAXG@Z void __cdecl fc2(unsigned short)
void fc4(dchar) ?fc4@@YAX_W@Z void __cdecl fc4(wchar_t) // msvc
期待される名前修飾 x86 (dmc製objとリンク可能)
void fc2(wchar) ?fc2@@YAX_Y@Z void __cdecl fc2(wchar_t) // dmc
void fc4(dchar) ?fc4@@YAXK@Z void __cdecl fc4(unsigned long)
期待される名前修飾 x64 (msvc製objとリンク可能)
void fc2(wchar) ?fc2@@YAX_W@Z void __cdecl fc2(wchar_t) // msvc
void fc4(dchar) ?fc4@@YAXK@Z void __cdecl fc4(unsigned long)
2.065はdmcから引きずったバグなのかと思いましたが
(↑dmcとmsvcのwchar_tの名前修飾が違うのは仕様のようです)
2.0660-rc2ではよりおかしくなっているようにも感じます
wchar_tの厳密な正しい表現ではないかもしれませんが
http://dlang.org/htod.html では
wchar_tをwcharに変換すると表記されているので間違ってはいないと思います
8/13: dcharの大きさと記載不足などを修正
2015/12/17: だいぶ前に直っているが修正