Do you need to interface with a COM, COMPlus, DCOM, OLE, ActiveX, ".Net", C++ object constructed using Microsoft's tools including their compilers, linkers, assemblies, or automation tools? This includes "DirectX", some native "Windows 7" components, and a lot of driver level components created by third-parties.

If the answer is "Yes"; you will have problems. It is only a matter of time. The above objects as constructed by Microsoft's tools use extensions designed precisely to hamper interoperability. Unfortunately, if the answer is "Yes" you will have problems with any compiler that hasn't been blessed by Microsoft with compatibility support or the tremendous effort by some community. In other words, you get to use "Embarcadero" and to a lesser extent "Intel". "LLVM", "Pelles", "GCC", and "LCC", I could name others, will all have problems with one or more of the above references objects.

If the answer is "No". Enjoy pretty much any compiler you chose, but at least pick one with strong, modern support for and conformance to the standards.

Soma