1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\combaseapi.h(229,21): error C2760: 構文エラー: 予期しないトークン '識別子 '、必要なトークン '型指定子'
1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\combaseapi.h(229,21): error C2760: syntax error: unexpected token 'identifier', expected 'type specifier'
いずれかの方法をひとつ選ぶ。
Windows 8.1 SDKなんて💩は使わない🗑- C/C++/言語/準拠モードを いいえ(
/permissive
)に設定する- この時
/std:c++latest
を有効にすると/permissive
は働かない(準拠モード/permissive-
と同じ)ので、/std:c++17
で妥協する必要がある
- この時
#include <Windows.h>
等の前にstruct IUnknown;
前方宣言を追加する(参考リンク)gdiplusheaders.h
とgdiplusstringformat.h
の謎宣言がどうしようもないので応急処置はもう出来ない
- Windows 8.1 SDKを部分的にWindows 10 SDK相当に差し替える
combaseapi.h.patch
:struct IUnknown
宣言前の使用を前方宣言で回避gdiplusheaders.h.patch
: 謎の宣言Metafile::EmfToWmfBits()
gdiplusstringformat.h.patch
: 謎の宣言StringFormat::GetTrimming()
- Clang with Microsoft CodeGen(2016/07版)でWindows.hを使うときに注意すべきこと
- 前方宣言で解決する方法。単一の
#include <Windows.h>
に応急的に対処するにはこれで十分。 - 複数のcppに
#include <Windows.h>
や#include <afxwin.h>
が書かれている場合はそれぞれに仕掛ける必要がある
- 前方宣言で解決する方法。単一の
- Compiler error C2760 in combaseapi.h in preview 16.8 (works in 16.7)
- "Not a Bug"😠。Windows SDKが壊れている(C++標準に準拠していない)のであって、VisualStudioは壊れていない。それはそう。