[Bug c++/81047] thread local storage static class members of class type cannot be initialized

2017-06-12 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81047

Jonathan Wakely  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |INVALID

--- Comment #2 from Jonathan Wakely  ---
https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b98-Thread-Local-Edits.html

> The storage for an object of thread storage duration shall be statically 
> initialized before the first statement of the thread startup function. An 
> object of thread storage duration shall not require dynamic initialization. 

So you can't use __thread for objects that require dynamic initialization.

(In reply to Jason Vas Dias from comment #0)
> Incidentally, the error is very confusing - it first claims that it
> is an error to attempt to initialize the TLS variable dynamically, and
> then issues a 'note:' that C++11 supports dynamic initialization of 
> TLS objects - but it doesn't ?

Yes it does, but __thread is not part of C++11.

thread_local is part of C++11, and supports what you're trying to do.

__thread and thread_local are not the same thing.

[Bug c++/81047] thread local storage static class members of class type cannot be initialized

2017-06-10 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81047

--- Comment #1 from Andrew Pinski  ---
What the error message is saying is if you use thread_local instead of
__thread; it would work (and c++11 or higher).