C++11 предлагает такие функции, как потокобезопасная инициализация статических переменных, и, цитируя этот вопрос, мы скажем, например:
Logger& g_logger() {
static Logger lg;
return lg;
}
Итак, якобы (?) это true независимо от того, включал ли модуль, скомпилированный с помощью компилятора C++11, заголовки потоков или порождал какие-либо потоки в своем теле. Вам предлагается гарантия, даже если он был связан с другим модулем, который использовал потоки C++11 и вызывал функцию.
Но что, если ваш «другой модуль», который вызывает этот код, использует потоки не C++11, а что-то вроде QThread
Qt. В таком случае атомарная инициализация статики выходит за рамки способности С++ 11 дать такую гарантию? Или сам факт того, что модуль был скомпилирован с помощью C++11, а затем слинкован с другим кодом C++11, означает, что вы все равно получите гарантию?
Кто-нибудь знает хороший справочник, где рассматриваются подобные вопросы?