/ Pesquisa de nome dependente de / argumento em C ++: ponto do rascunho do n3290 - c ++, namespaces, c ++ 11, pesquisa de nome

Consulta de nome dependente de argumento em C ++: point from n3290 Rascunho - c ++, namespaces, c ++ 11, lookup de nome

Um ponto do ISO C ++ DRAFT n3290: pesquisa de nome dependente de argumento: seção 3.4.2, parágrafo 2,

Para cada argumento, digite T na chamada de função,existe um conjunto de zero ou mais namespaces associados e um conjunto de zero ou mais classes associadas a serem considerado. Os conjuntos de namespaces e classes são determinados inteiramente pelo tipos dos argumentos da função (e o espaço para nome de qualquer modelo de modelo Os nomes de tipos e declarações de uso são usados ​​para especificar os tipos não contribuir para este conjunto. Os conjuntos de namespaces e classes são determinados Da seguinte maneira:

- Se T é um tipo fundamental, seus conjuntos associados de namespace e classes são ambos vazios.

- Se T é um tipo de classe (incluindo sindicatos), seuclasses associadas são: a classe em si; a classe da qual é membro, se houver; e sua direta e indireta classes base. Seus namespaces associados são os namespaces dos quais seus classes associadas são membros.

Além disso, se T é um modelo de classe especialização, suanamespaces e classes associados também incluem: o namespaces e classes associados aos tipos dos argumentos do modelo fornecido para parâmetros de tipo de modelo (excluindo parâmetros de modelo); os espaços para nome dos quais qualquer argumento de modelo de modelo é membro; e a classes das quais qualquer modelo de membro usado como argumento de modelo é
membros.

[ Nota: Os argumentos de modelo não-tipo não contribuem para o conjunto de um namespaces associados. - nota final]

Alguém pode por favor expalin isso em termos de um exemplo ... por favor

aqui na declaração acima "conjuntos de namespaces e classes estão vazios" .. como isso é possível?

E no segundo ponto ele disse o quanto mais ... por favor, alguém pode explicar isso?

Respostas:

6 para resposta № 1

Os tipos fundamentais, como int e char, não estão definidos em nenhum espaço de nome ou classe. É por isso que a lista de associações deles estará vazia.

Se os parâmetros de função forem tipos criados a partir de um modelo, não apenas o espaço para nome desse modelo será considerado, mas também os espaços para nome dos parâmetros do modelo. Por exemplo, se você tiver um std::vector<foo::bar> como parâmetro, o conjunto de namespaces incluirá ambos std e foo.