Я обновляюсь с Visual Studio 2013 до Visual Studio 2015 и заметил эту разницу в поведении.
#include <stdexcept>
#include <WinSock2.h>
#include <ws2tcpip.h>
int main()
{
WORD version = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(version, &wsaData) != 0)
{
throw std::runtime_error("This one is not thrown");
}
WSASetLastError(1);
if (WSAGetLastError() != 1)
{
throw std::runtime_error("This one neither");
}
#if 1
std::runtime_error test("an error");
#endif
if (WSAGetLastError() != 1)
{
throw std::runtime_error("This is thrown when the above code path is enabled");
}
return 0;
}
Когда я включаю путь кода std::runtime_error, флаги WSAGetLastError сбрасываются. Отключите его, и программа без проблем вернет 0.
WSAStartup
? Ознакомьтесь с документацией: msdn. microsoft.com/en-us/library/windows/desktop/ - person PaulMcKenzie   schedule 07.03.2016