Короч, оч много слов интуристов! Но, как я понял, описатель thread_local сразу же подразумевает static (не? пруф?)
Не. Пруф прям в цитате: они могут иметь linkage как external, так и internal. Это просто объекты, локальные в потоке. Т.е. каждая нитка, обращаясь к ним по имени, будет ссылаться на свои собственные объекты.
Собственно, вопрос: а если заменить все описатели static на аналоги c thread_local, то можно ли данную либу использовать в многопоточной среде (в более чем одном потоке)?
Собсвтенно поэтому и нет. thread_local нужно делать любые глобальные объекты, которые хранят состояния, которые могут быть разрушены гонкой потоков.