Ответ 1
Статические инициализаторы могут вызывать функции, если они находятся в области видимости.
[dcl.decl]
(формулировка 2003 года, 8/2):
Можно также указать начальные значения в объявлении; инициализаторы обсуждается в 8.5 и 12.6.
[dcl.init]
(формулировка 2003 года, 8.5/2):
Автоматический, зарегистрировать, статический и внешние переменные области пространства имен может быть инициализирован произвольным выражения, содержащие литералы и ранее объявленные переменные и Функции.
(Не следует вводить в заблуждение из-за отсутствия ключевого слова static
, которое имеет всевозможные значения. Ваша переменная myvar
объявляется в области пространства имен и, следовательно, имеет статическую продолжительность хранения.)