C ++ Standard, 3.6.2 / 1 :
Обнуление инициализации и
инициализация с константой
выражение в совокупности называется
статическая инициализация; все остальные
инициализация динамическая
инициализация. Объекты типов POD
(3.9) со статической продолжительностью хранения
инициализируется с помощью константных выражений
(5.19) инициализируется до
происходит динамическая инициализация.
Объекты со статической продолжительностью хранения
определяется в области имен пространства в том же
блок перевода и динамически
инициализируется должен быть инициализирован в
порядок, в котором их определение
появляется в блоке перевода.
Это фактически означает, что даже когда другая единица перевода вызывает вашу функцию SomeFunc извне, ваша константа SOME_VALUE всегда будет правильно инициализирована, поскольку она инициализируется с помощью константного выражения .
Единственный способ для вашей функции вызываться раньше (до main) - это при инициализации объекта с динамической инициализацией. Но к тому времени, согласно стандартной цитате, инициализация вашей переменной POD уже завершена.