I have VC++ makefile projects with some extra bits to support a custom toolchain. I'm passing all of the include paths and macros to IS via <NMakeIncludeSearchPath/> and </NMakePreprocessorDefintions>. The compiler is clang. IS somewhat works but doesn't understand gcc/clang builtins, etc. It also doesn't honor __cplusplus passed in via NMakePreprocessorDefintions. If I define __cplusplus to 201104, it always shows 199711 when I hover over it in the editor.
I create a VC++ for Linux project (the blink template). When I hover over __cplusplus in that it correctly shows 201104, or whatever I choose for the C++ language standard in the project options.
I enabled IS logging so I could see exactly what options it's passing for each translation unit. I can see it's passing /ClangMode, /TP and /Clangstdc++11. I don't see those options documented in cl.exe anywhere. I've also read that IS is using the EDG front-end, but the options IS logging reports are actually cl.exe options, not EDG. So I'm very confused as to what's going on here. What front-end is VC++ actually using for IS? I'm using VS2015 BTW.
OK, so if I pass __cplusplus as a macro it's probably just being overridden by the front-end anyway, so I need to pass the language standard to the front end. I see how the blink project does it so I do the same in my project. I can now see that's it's passing /ClangMode, /TP and /Clangstdc++11 to the front-end for my project. But it still shows 199711!! I closed/reopened the project, restarted VS, deleted the .suo. I feel like I've tried everything.
Could someone please enlighten me on how this works and how I might be able to debug what it's not working as I'd expect?
Thanks,
Warren