Ftypes.h incorrectly enables Unicode (on MSVC/others?)

To be clear, this is not just for convenience. Writing string-type agnostic code (using all these techniques) allows you to write library code, and apps, than can work for either string type just by changing the project settings. So a Windows programmer should never explicitly call a specific function.

That means that, for example, all strings are wrapped like this:

<include tchar.h> // provides string function type wrappers, as well as the _T() macro

const TCHAR* string = _T("my string");

With _UNICODE defined, this resolves to:

const wchar_t* string = L"my string";

Without _UNICODE it resolves to

const char* string = "my string";

So as you can see this compiles correctly in either scenario.