Почему объявление статической переменной с непостоянной не дает Error in g++ - программирование

Почему объявление статической переменной с непостоянной не дает Error in g++

 int main ( )
 {
       int a = 1 ;
       static int b = a ;
 }

Этот фрагмент кода дает ошибку в gcc 4.3.2 как

error: элемент инициализации не является константой.

Но он отлично работает на g++ 4.3.2.  Кто-нибудь Пожалуйста, объясните, почему это не дает ошибки в g++ 4.3.2.

4b9b3361

Ответ 1

Потому что он действителен в С++ (и недействителен в C).

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