Зависящий от аргумента поиск имени в C ++: точка из черновика n3290 - PullRequest
1 голос
/ 28 июля 2011

Точка из ISO C ++ ПРОЕКТ n3290: Аргумент-зависимый поиск имени: раздел 3.4.2, параграф 2,

Для каждого типа аргумента T в вызове функции существует набор из нуля или более связанные пространства имен и набор из нуля или более связанных классов, которые будут считается. Наборы пространств имен и классов полностью определяются типы аргументов функции (и пространства имен любого шаблона шаблона Аргумент) .Typedef имена и использование-объявления, используемые для определения типов делать не способствовать этому набору. Наборы пространств имен и классов определены следующим образом:

- Если T является фундаментальным типом, его связанные наборы пространства имен и классов оба пустые.

- Если T является типом класса (включая объединения), его ассоциированные классы: класс сам; класс, членом которого он является, если таковой имеется; и его прямой и косвенный базовые классы. Связанные пространства имен являются пространствами имен, из которых его ассоциированные классы являются членами.

Кроме того, , если T - шаблон класса специализация, связанные с ней пространства имен и классы также включают в себя: пространства имен и классы, связанные с типами аргументов шаблона предоставляется для параметров типа шаблона (исключая параметры шаблона шаблона); пространства имен, членами которых являются любые аргументы шаблона; и классы, для которых любые шаблоны-члены, используемые в качестве аргументов шаблонов, являются
члены.

[ Примечание: Нетипизированные аргументы шаблона не вносят вклад в набор связанные пространства имен. - конец примечания]

Может ли кто-нибудь объяснить это в качестве примера ... пожалуйста

здесь, в приведенном выше утверждении "наборы пространств имен и классов оба пусты" .. как это возможно?

И во 2-м пункте он сказал, что дальше ... пожалуйста, кто-нибудь может объяснить это?

1 Ответ

6 голосов
/ 28 июля 2011

Фундаментальные типы, такие как int и char, не определены ни в одном пространстве имен или классе.Вот почему их список ассоциаций будет пустым.

Если параметры функции являются типами, созданными из шаблона, учитывается не только пространство имен этого шаблона, но также пространства имен его параметров шаблона.Например, если у вас есть std::vector<foo::bar> в качестве параметра, набор пространств имен будет включать std и foo.

...