This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115d. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-10-26
[Moved to DR at the November, 2014 meeting.]
According to 9.2.2 [dcl.stc] paragraph 1,
...If thread_local appears in any declaration of a variable it shall be present in all declarations of that entity... A storage-class-specifier shall not be specified in an explicit specialization (13.9.4 [temp.expl.spec]) or an explicit instantiation (13.9.3 [temp.explicit]) directive.
These two requirements appear to be in conflict when an explicit instantiation or explicit specialization names a thread_local variable. For example,
template <class T> struct S { thread_local static int tlm; }; template <> int S<int>::tlm = 0; template <> thread_local int S<float>::tlm = 0;
which of the two explicit specializations is correct?
Proposed resolution (February, 2014):
Change 9.2.2 [dcl.stc] paragraph 1 as follows:
...A storage-class-specifier other than thread_local shall not be specified in an explicit specialization (13.9.4 [temp.expl.spec]) or an explicit instantiation (13.9.3 [temp.explicit]) directive.