VS 2012 call_once is broken
От: Alexander G Украина  
Дата: 24.11.16 10:58
Оценка: 14 (3)
Call once в дебаг конфигурации может вызваться два раза.
Потому что в студии 2012 нет constexpr, и у std::once_flag обычный конструктор.
В VS 2015 всё ок уже.

#include <iostream>
#include <mutex>

struct S
{
    static void OnlyLiveOnce() {  std::cout << "Once\n"; }
    
    S()
    {
        std::call_once(f, OnlyLiveOnce);
    }
    
    static std::once_flag f;
};

S s; // Called  once

std::once_flag S::f; // Initialized once flag

int main()
{
   S s1; // Called twice
   S s2; // No more calls
}
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.