[英]Overload resolution of a qualified name
考慮以下函數調用:
foo::bar();
11.3.1.1.1第3段[over.call.func]( N4778 )涵蓋了這種情況:
在不合格的函數調用中,名稱不被
->
或限定.
運算符,並且具有更通用的primary-expression形式 。 在函數調用的上下文中按照在函數調用中查找名稱的常規規則來查找名稱...
在這里, foo::bar
是一個非限定名稱, 從某種意義上說,它不是由->
或限定的.
。 因此,本款適用。 現在,在6.4第2段[basic.lookup]中解釋了短語“在上下文中查找”的含義:
在找到表達式的范圍內,將“在表達式的上下文中查找”的名稱查找為不合格的名稱 。
但是, foo::bar
是名稱查找范圍中的限定名稱。 換句話說,這些段落的組合基本上說,合格名稱foo::bar
是通過不合格名稱查找的規則查找的。 但是,我認為不合格的名稱查找不能遞歸地進入較窄的范圍,即foo
to bar
。 這是缺陷嗎?
不,我不認為這是一個缺陷。 它說
在函數調用的上下文中按照在函數調用中查找名字的常規規則來查找名字 [...]
從突出顯示的部分可以看到,該標准指定了應如何查找名稱:通過名稱查找。
名稱查找涉及非限定,限定和與參數相關的查找,因此,您的名稱確實由限定名稱查找規則解析。
“在expr的上下文中查找”規則在這里不適用,因為它指定了使用什么規則。 該段僅在不起作用時起作用。 例如,在[class.qual] p1中 :
在整個postfix-expression發生的上下文中查找template-id的template-argument中的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.