В C ++ 11 инициализация статических переменных области видимости функции / thread_local гарантированно поточно-ориентирована. Они также гарантированно инициализируются при входе в функцию?
Согласно [stmt.dcl] / 4 (выделено мое):
Инициализация нуля (8.5) всех переменных области блока со статической продолжительностью хранения (3.7.1) или хранением потока
Продолжительность (3.7.2) выполняется до любой другой инициализации. Постоянная инициализация (3.6.2)
выполняется объектная область со статической продолжительностью хранения, если применимо прежде чем его блок впервые введен.
Реализация может выполнять раннюю инициализацию других переменных области блока со статическим или
продолжительность хранения потока при тех же условиях, что реализация может статически инициализировать
переменная со статической или продолжительностью хранения потока в области имен (3.6.2). В противном случае такая переменная
инициализируется первый раз контроль проходит через свою декларацию; такая переменная считается инициализированной после
завершение его инициализации.
Я не уверен, что вы подразумеваете под «входом в функцию», но все ответы приведены в абзаце, который я цитировал.
Других решений пока нет …