Per 6.7.1 p4 > In the declaration of an object with block scope, if the declaration specifiers include thread_local, they shall also include either static or extern. gcc does complain. Online demo https://godbolt.org/z/YorncrhKW cc @AaronBallman