Ответ 1
Потому что он действителен в С++ (и недействителен в C).
(С++ 11, 6.7p4) "Постоянная инициализация (3.6.2) блочной области объект со статической продолжительностью хранения, если это применимо, выполняется до сначала вводится его блок. [...] В противном случае такая переменная инициализированный первый контроль времени проходит через его объявление; такая переменная считается инициализированной после завершения его инициализации.