Clang/C2 -fno-delayed-template-parsing error with windows.h
Compiling a file that includes windows.h with the latest Clang/C2 and MSVC 2015 Update 3 results in an error. Some experimentation indicates it may be -fno-delayed-template-parsing
, but I don't know if removing that could introduce other problems.
Example CMakeLists.txt:
cmake_minimum_required(VERSION 3.6)
project(foo CXX)
add_executable(foo foo.cpp)
and foo.cpp:
#include <windows.h>
int main() {}
Built with:
cmake -G "Visual Studio 14 2015" -T v140_clang_c2
cmake --build . --config Debug
Results in:
D:\Microsoft Visual Studio 14.0\VC\ClangC2\bin\x86\clang.exe -c -fdiagnostics
-format=msvc -target "i686-pc-windows-msvc" -I "D:\Microsoft Visual Studio 14
.0\VC\ClangC2\include" -I "D:\Microsoft Visual Studio 14.0\VC\include" -I "D:
\Microsoft Visual Studio 14.0\VC\atlmfc\include" -I "C:\Program Files (x86)\W
indows Kits\10\Include\10.0.10240.0\ucrt" -I "C:\Program Files (x86)\Windows
Kits\8.1\Include\um" -I "C:\Program Files (x86)\Windows Kits\8.1\Include\shar
ed" -I "C:\Program Files (x86)\Windows Kits\8.1\Include\winrt" -o "foo.dir\De
bug\foo.obj" -Wall -O3 -fno-strict-aliasing -fomit-frame-pointer -ffunction-s
ections -fdata-sections -fstack-protector -fpic -fno-short-enums -fno-rtti -D
_DEBUG -D "CMAKE_INTDIR=\"Debug\"" -D NDEBUG -D _MBCS -x c++ -fms-extensions
-fno-ms-compatibility -fdelayed-template-parsing -gline-tables-only -fno-in
line -O0 -fno-delayed-template-parsing -D_DEBUG -D_MT -D_DLL -Xclang --depen
dent-lib=msvcrtd -Xclang --dependent-lib=oldnames D:\dump\squash2\squash\t\fo
o.cpp
foo.cpp
In file included from D:\dump\squash2\squash\t\foo.cpp:1:
In file included from C:\Program Files (x86)\Windows Kits\8.1\Include\um\wind
ows.h:210:
In file included from C:\Program Files (x86)\Windows Kits\8.1\Include\um\ole2
.h:32:
In file included from C:\Program Files (x86)\Windows Kits\8.1\Include\um\objb
ase.h:27:
C:\Program Files (x86)\Windows Kits\8.1\Include\um\combaseapi.h(229,21): error
: unknown type name 'IUnknown' [D:\dump\squash2\squash\t\foo.vcxproj]
static_cast<IUnknown*>(*pp); // make sure everyone derives from IU
nknown
^
1 error generated.
If I build foo.cpp from the command line it fails with the same error when I pass -fno-delayed-template-parsing
:
> "%VCINSTALLDIR%\ClangC2\bin\amd64\clang.exe" -fno-delayed-template-parsing foo.cpp
In file included from foo.cpp:1:
In file included from C:\Program Files (x86)\Windows Kits\8.1\include\\um\windows.h:210:
In file included from C:\Program Files (x86)\Windows Kits\8.1\include\\um\ole2.h:32:
In file included from C:\Program Files (x86)\Windows Kits\8.1\include\\um\objbase.h:27:
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 fr...
^
1 error generated.