Em sábado, 19 de novembro de 2016, às 13:07:04 PST, Marc Mutz escreveu: > As soon as someone explains to me what the material difference is between a) > supporting mixing libc++ and libstdc++ on Unix platforms and b) supporting > mixing release and debug runtimes on Windows,
libc++ and libstdc++ are designed to interoperate, because they share operator new, std::exception and the base typeinfos, if compiled properly[*]. That means memory new'ed with one can be delete'd in the other, exceptions thrown in one can be caught in the other, dynamic casts work, etc. The MSVC CRTs are currently not designed to interoperate. Not only do they each have their own operator new, one's delete cannot delete the other's pointers. That said, we *could* build a debug mode Qt against the release runtime (-Od -MT), we just don't. It's one of those "it was like that when I arrived" problems of Qt 4.0, though I helped fix the Unix debug/release problem for 4.2. Another reason is that no one deploys debug-mode. So there's little danger of mixing because it doesn't happen in customers' hands. And then there's the fact that MS keeps breaking BC if you change the compiler, so anyone using MSVC needs to be careful anyway to avoid polluting one build with plugins from another, something that elsewhere is permitted. Just think of how pointless our discussion on whether we should upgrade our packaging system to MSVC 2015 Update 3 or not... Finally, MS has said it will start keeping binary compatibility with Visual Studio 2017 onwards (or was it 2015 onwards?), so this is actually a good time to revisit this. [*] Apple compiles them properly. I have yet to see someone compiling them properly on Linux. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center _______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development