костыль?
std::vector<int> something_global;
void ensure_global_initialized() {
static int initializer = [] () {
something_global = { 1, 2, 3 };
return 0;
} ();
}
Предполагая ручной вызов ensure_global_initialized()? А чем это лучше синглтона Мейерса?
Тем, что нужен костыль :( Вызов уже есть, инициализация сложная штук 8 полей, не хочу рефакторить сейчас
Кек std::vector<int> something_global; void ensure_global_initialized() { static int initializer = [] () { something_global = { 1, 2, 3 }; ensure_global_initialized(); //dead lock on MSVC x64 return 0; } (); }
Кажется, это implementation defined поведение. И синглтон Мейерса тоже от этого страдает, из серии каверзных вопросов
MSVC же, емнип, использует табличку глобальных мьютексов для защиты такой инициализации от гонок
Обсуждают сегодня