Title
thread_local in explicit specializations
Status
cd4
Section
9.2.2 [dcl.stc]
Submitter
Mike Herrick

Created on 2013-10-02.00:00:00 last changed 49 months ago

Messages

Date: 2014-11-15.00:00:00

[Moved to DR at the November, 2014 meeting.]

Date: 2014-02-15.00:00:00

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.
Date: 2013-10-02.00:00:00

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?

History
Date User Action Args
2017-02-06 00:00:00adminsetstatus: drwp -> cd4
2015-05-25 00:00:00adminsetstatus: dr -> drwp
2015-04-13 00:00:00adminsetmessages: + msg5355
2014-11-24 00:00:00adminsetstatus: ready -> dr
2014-03-03 00:00:00adminsetmessages: + msg4818
2014-03-03 00:00:00adminsetstatus: open -> ready
2013-10-02 00:00:00admincreate