int i;
void f()
{
int i{};
{
int a = i; // local or global 'i'?
}
}
Мой вопрос не в том, какой i
выбирается, поскольку ясно, что это локальный, а в том, где в стандарте указано.
Самое близкое правило, которое я смог найти, это [basic.lookup.unqual]p6 а>, в котором говорится:
В определении функции, которая является членом пространства имен N, имя, используемое после declarator-id функции, должно быть объявлено до его использования в блоке, в котором оно используется, или в одном из его охватывающих блоков. блоков ([stmt.block]) или должен быть объявлен до его использования в пространстве имен N, или, если N является вложенным пространством имен, должен быть объявлен до его использования в одном из включающих N пространств имен.
Но там просто сказано, что имя должно быть объявлено за некоторое время до использования; это не то, что я ищу. Пример в том же абзаце делает все более ясным, поскольку говорит, какие области поиска и в каком порядке, но это пример и, как таковой, не именительный падеж.
Все остальные абзацы в [basic.lookup.unqual] не применяются к функциям, не являющимся членами. Итак, мой вопрос: где в стандарте это указано?
i
не входит в область действия (согласно моей другой ссылке). - person melpomene   schedule 28.07.2018