初めに
みなさん、Clang with Microsoft CodeGenは使ってますか?
まだの方は半年前に投稿した記事ですが
Clang with Microsoft CodeGenがでたので試す
http://qiita.com/yumetodo/items/bd41f31f39dd590e8c80
を見ましょう。地味にこまめに更新してます。
どんどん使える子になってきてるのでどんどん使ってあげましょう。コンパイルエラーわかりやすいですし。
かつて存在した問題
Clang with Microsoft CodeGen(July 2016)では、Windows.hをincludeすると
C:\Program Files (x86)\Windows Kits\8.1\Include\um\combaseapi.h(229,21): error : unknown type name 'IUnknown'
static_cast<IUnknown*>(*pp); // make sure everyone derives from IUnknown
とか怒られていました。
一体いつからかこれは修正されました(2016/12現在)
解決策
というわけでClang with Microsoft CodeGen(July 2016)でもコンパイルが通るように
#if defined(__c2__) && __clang_major__ == 3 && __clang_minor__ == 8
//To avoid compile error
//C:\Program Files (x86)\Windows Kits\8.1\Include\um\combaseapi.h(229,21): error : unknown type name 'IUnknown'
// static_cast<IUnknown*>(*pp); // make sure everyone derives from IUnknown
struct IUnknown;
#endif
#include <Windows.h>
としましょう。COM周りを使わなければClang with Microsoft CodeGen(July 2016)でもコンパイルが通るし、それ以外のバージョンにも被害は出ません。おまじない代わりにいかがですか?