std::call_once zawsze rzuca wyjatek

0
 
int main(){
	std::cout<<"Poczatek\n";
	std::once_flag flag;
	std::call_once(flag, []{std::cout<<"dziala\n";});

	return 0;
}

Czy popelniam jakis blad czy mam cos nie tak ze srodowiskiem ?
Zawsze leci blad:

**Poczatek
terminate called after throwing an instance of 'std::system_error'
  what():  Unknown error -1
Aborted (core dumped)**
int __e = __gthread_once(&__once._M_once, &__once_proxy);

to w pliku mutex.h jest w linijce 746 i zwraca wartosc != 0 z czego wynika wyjatek, moze to cos komus powie
Mimo tego nie wiem czy to moja maszyna wirtualna ma cos zle czy ja cos zle pisze

dodanie znacznika <code class="cpp"> - @furious programming

1

Prawdopodobnie bug kompilatora: http://stackoverflow.com/questions/15311469/throwing-an-exception-from-stdcall-once?rq=1
U mnie pod MSVC2013 wszystko działa. Wczesne wersje gcc i MSVC miały różne dziwne problemy z C++11 a szczególnie z obsługą wątków. Sprawdź na nowszej wersji kompilatora.

1

Tak przy okazji, lokalna flaga std::once_flag (powinna być statyczna/thread_local/jakieś inne logiczne once) mija się z celem - za każdym będziesz "ten jeden raz" wykonywał przekazany funktor.

0

Dzieki za pomoc ;) z tym lokalnym to wiem, ale dzieki za sygnal

1

Package gcc-c++-4.9.2-6.fc21.x86_64 already installed and latest version

dalej to samo ;(

Problem rozwiazalo dodanie -lpthread

zrodlo: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55394

1 użytkowników online, w tym zalogowanych: 0, gości: 1