I am confused about the binary compatibility of compiled libraries between VS2010 and VS2012. I would like to upgrade to VS2012, however, many closed-source binary SDKs are only available for VS2010, such as an SDK for interfacing hardware devices.
Traditionally, as far as I know, Visual Studio was very selective about the versions of the compiler, and in VS2010 you could not refer to the libraries that were compiled for VS2008.
The reason I'm confused right now is because I am switching to VS2012 and I have tried several projects, and to my great surprise, many of them work without cross versions.
Note. I'm not talking about v100 mode, which, as far as I know, is just the VS2012 GUI over the VS2010 compiler.
I am talking about opening a VS2010 solution in VS2012, clicking on an update, and see what happens.
When linking to some larger libraries, for example boost, compilation does not work, because there are checks for the compiler version, and they create an error and interrupt compilation. Some other libraries simply break with missing functions. This is the behavior I was expecting.
On the other hand, many libraries work fine, without errors or additional warnings.
How is this possible? Has VS2012 specifically supported binary compatibility with VS2010 libraries? Does it depend on dynamic or static binding?
And the most important question: despite the fact that no error occurs during compilation, can I trust the compiler that there will be no errors when linking the VS2012 project with the compiled VS2010 libraries?