So recently 2 of my bug-reports to the Microsoft Visual Studio “14” CTP got acknowledged as bugs. I thought I’d recap them here.
The first one is a pretty straight-forward library regression. The local aware character classification functions from <ctype.h> like _isalnum_l now have one argument of the apparently internal type __crt_locale_pointers (_locale_t is typedef’ed to it). This appears to be a remnant/copy&paste-error of using this code in the CRT. This wouldn’t be an issue if the <ctype.h> header would declare that type but it doesn’t. No biggie, this was a straightforward regression from MSVC 2013.
The other bug was a little more C++ language related and a little more confusing too. The minimal code example that crashes is this:
#include <string>
struct Msg
{
std::string mText;
};
void log(Msg msg){}
int main() {
log({ "t stuff" });
return 0;
}
What happens here is that the compiler correctly constructs the Msg object and elides a copy but then calls the destructor twice (once on an invalid location). This of course won’t cause crashes for trivially destructible types but resource owning types like std::string cause this program to crash.
This error happened in both MSVC 2013 and MSVC “14” CTP.
This should be enough to chronicle some more of the bugs I personally encountered, not really much a point beside that to this post.