TLDR; static (const) переменные в global scope работяют как в Си, в local scope создаётся туча кода с мьтексами, блокировками и бросанием исключений.
Снова и снова я возвращаюсь к С++ с мыслями "ну, может не такой он и стрёмный? в конце-концов RAII, можно красиво писать" и каждый раз какое-то говно находится. В этот раз —
https://manishearth.github.io/blog/2015/06/26/adventures-in-systems-programming-c-plus-plus-local-statics/. А что там было насчёт "не плати за то, что не используешь?", а что насчёт move semantics и precondition? Почему тут нельзя было так же сделать: объявил локально статичную переменную — будь добр не вызывать эту функцию абы как?