Я думал, что это может быть новое предупреждение, но нет - it was earlier just turned off by default. Я полагаю, что это давняя «проблема», однако было бы не так просто преобразовать ее в реальную ошибку (если это вообще возможно и имеет побочные эффекты).
Проблема связана с картой точек подключения, используя статическую локальную переменную _entries
внутренне, которая инициализируется при первом использовании в потокобезопасном режиме. Это, однако, инициализация указателя с фиксированными значениями, на которые ссылается указатель. Возможно, проблема состоит в том, что поток # 1 рассматривает карту как инициализированную, а поток # 2 находится только в середине инициализации. Довольно редкое состояние, неудивительно, что до сих пор не было никаких жалоб.
Решение может быть в окружающих статической инициализации переменных с глобальной блокировки критической секции, такие как
ATLASSERT(_pAtlModule);
CComCritSecLock<CComCriticalSection> Lock(_pAtlModule->m_csStaticDataInitAndTypeInfo);
static ...
в карте макросов, и подавление предупреждения с помощью #pragma
. Это должно быть исправление в коде заголовков ATL (atlcom.h).
Спасибо @ roman-r, я отключил его с предупреждением #pragma (disable: 4640) в stdafx.h. По какой-то причине он работал только для файлов заголовков, включенных непосредственно в stdafx.h, но это еще одна проблема. –
https://connect.microsoft.com/VisualStudio/feedback/details/2539759/c4640-warning-cannot-be-disabled – thims