nice necrobump.
Also, more importantly you're missing the entire context and cherrypicking specific features - betcha if I did the same thing I can find features microsoft implemented first but that's beside the point, I more or less conceded that I don't give a poop in my final post if you actually parse the context and phrasing - it's irrelevant to me, when I build for *nix I use GCC and when I build for windows I use MSVC (clang for everything else) - this has less to do with feature support, I can refactor around that and use #ifdef's to encapsulate it.
No the point is primarily how well it integrates with the host environment, including how well the output binary behaves.
I still remember the time when I was using an std::string that came via a template parameter and MSVC was glad to do something like printf("%s", std::string("whatever")) (and worked btw). But when I switched to GCC, he was like "wtf you tryna do, fool?".
printf isn't typesafe, to throw std::string at it you must postfix it with .c_str(), MSVC has some microsoft extensions to make this optional (i.e the compiler inserts it or whatever) but it's not standard code, user error isn't an argument for or against a compiler. (fyi GCC also has a bunch of vendor extensions that break outside the environment, like the oh so useful #warning preprocessor directive)
And there's a 50% chance that you'll find MSVC workarounds in C++11 projects/libraries and about 90% chance for C++14 projects/libraries. There's always a piece of code with a comment near it "Need to use this workaround because MSVC does or does not do a certain thing properly or at all.".
Yeah but guess what, working around a quasi-broken feature is still better than nothing.
For example, move semantics and perfect forwarding - this depends on a few features like being able to get the rvalue references (you can hack around this but nonetheless, you can't do this properly in 4.7), GCC 4.7 branch doesn't support it (2012), MSVC 2010 supports this according to the MSDN. (2010) and this isn't even a fair comparison, we should compare to MSVC 2012 or MSVC 2013
Nonetheless, the point wasn't to bash any one compiler. The point was that I don't give one flying gently caress in reality, does it output acceptable machine code? If yes: well where's the problem then?
The story might be different in recent MSVC version. I certainly wouldn't know about it. I haven't used it in a long while. So you could be right after all. But only to a certain degree.
Depends on how recent we look at and what features we consider important, using rvalues is partially a cheap move on my end since microsoft are the ones who pushed for it to be part of the standard, but the point is more or less for both compilers you have to do a fair bit of hacking to get around vendor extensions, incomplete or incorrect implementations, missing implementations et cetera.
This is compounded when you use forks of compilers such as mingw which has its own set of supported features that differs from GCC's, especially problematic when it comes to missing C++11/14/17 features (C++11 is just now becoming mature enough to have a reliable implementation across the board, I'll still probably hold off for a couple of years to use more than a handful of features)
EDIT: oh yeah, here's one of the MSDN pages used:
https://msdn.microsoft.com/en-us/library/hh567368.aspx
It has a pretty good overview of supported features.
As for GCC support:
https://gcc.gnu.org/gcc-4.5/cxx0x_status.html (in case you want to compare 2010 to 2010)
https://gcc.gnu.org/gcc-4.6/cxx0x_status.html (2012 or so, has reasonable C++11 support but is 2 years newer than the compared MSVC branch)
(GCC 4.8.1 has a 'feature complete' implementation but that's late 2013)
EDIT 2: I just found a citation for a thing I wanted to list, nullptr support - but I wasn't going to trust my memory on that one
http://stackoverflow.com/questions/2419 ... ted-in-gcc
MSVC 2010 supported nullptr, GCC at the time did not - this caused some amount of grief with having to either not use nullptr, not support non-ms platforms, or hack around the lacking support. Still probably have that hack in some old backup or test.