Зарезервированные имена в глобальном пространстве имен

Исходя из моего ответа на Динамический массив объектов в C++и как продолжение Каковы правила использования подчеркивания в идентификатор C++? : по-видимому, имена, начинающиеся с _, за которыми следует заглавная буква, зарезервированы в глобальном пространстве имен.

17.4.3.2.1 Глобальные имена [ lib.global.names]

Определенные наборы имен и сигнатур функций всегда зарезервированы для реализации:

  • Каждое имя, содержащее двойное подчеркивание ( __) или начинается с символа подчеркивания, за которым следует заглавная буква (2.11), зарезервировано реализацией для любого использования.
  • Каждое имя, начинающееся с символа подчеркивания, зарезервировано реализацией для использования в качестве имени в глобальном пространстве имен. 165

165)Такие имена также зарезервированы в пространстве имен ::std(17.4.3.1).

В моем ответе на первый вопрос у меня был класс, который выглядел так

class A
{
 private:
   vector _Ints;
}

В комментариях мне сказали, что идентификатор _Intsвызывает неопределенное поведение, поскольку это зарезервированное имя. Однако, согласно последнему проекту стандарта, поиск имени переменной-члена происходит с использованием следующего правила:

3.4.3.1 Члены класса [класс.qual]

Если спецификатор вложенного именидля квалифицированного идентификатораназначает класс, имя, указанное после спецификатора вложенного имениищется в рамках класса (10.2), за исключением случаев, перечисленных ниже. Имя должно представлять один или несколько членов этого класса или одного из его базовых классов.

Для меня это означает, что никакая переменная-член никогда не может быть частью глобального пространства имен, поскольку ее областью действия является класс.

А теперь вопрос:

Правильно ли я понимаю, что переменные-члены никогда не будут нарушать правило зарезервированных имен реализации, поскольку они не находятся в глобальном пространстве имен? Если я не прав, может ли кто-нибудь объяснить мое непонимание правила поиска?

5
задан Toby Speight 22 June 2017 в 08:45
поделиться