https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66944
Bug ID: 66944 Summary: static thread_local member in class template may cause compilation to fail Product: gcc Version: 5.2.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: zhykzhykzhyk at gmail dot com Target Milestone: --- Affect Versions: 4.9.3, 5.1.0, 5.2.0 Expected behavior: compiles correctly (like clang does) Compiler output: bug.cc:14:34: error: redefinition of 'bool __tls_guard' thread_local std::vector<void *> A<T>::v; ^ bug.cc:14:34: note: 'bool __tls_guard' previously declared here bug.cc:14: confused by earlier errors, bailing out == code == struct Heavy { Heavy(){} }; template <typename T> struct A { virtual void foo() { v; } static thread_local Heavy v; }; template <typename T> thread_local Heavy A<T>::v; struct E {}; struct F {}; int main() { A<E> foo; A<F> bar; bar.v; } ==========