Microsoft used to simply make a C++ system that let you access their Windows API (called win32), then one day they invented .NET and figured everything had to change.
So they created "Managed Extensions for C++" which was basically C++ but with a load of non-standard extensions, adding keywords like __gc
to support .NET features (like allocating on the GC heap rather than the native one)
But people didn't like this as it really wasn;t C++, having all those extra keywords, so Microsoft redesigned it and called it C++/CLI, which had a much smaller set of additional keywords but introduced syntax changes like the ^
(which is a reference 'pointer' to a .NET object on the GC heap).
A few years later and Microsoft has realised .NET isn't the silver bullet they said it was, and they also merged their in-fighting Windows and Developer teams. Part of this re-evaluation led to the creation of a brand new Windows API, called WinRT, that is entirely native code and this meant the old extensions were no longer useful, so Microsoft developed their C++ extensions to one that made working with the new WinRT API easier - by keeping a few extensions from C++/CLI (such as the ^).
So - there you go, 3 different versions of an extended C++ that is superficially C++. At least the latest version is native code again, so you don't need to use the extensions if you don't want to as you can directly access the API (it's called WRL and is a lot like the old ATL template classes)
If you think you might be coding cross-platform code you won't want to - you can change the API calls, but you cannot use the ^
on any compiler other than Visual C++. I'd recommend using the WRL API and keeping your code as standard as possible given the 'extra code' you'd need to write compared to C++/CX isn't so great.