[英]What's the difference between an explicit call and an implicit call of the conversion function?
考慮這個例子:
struct A{
template<class T>
operator T(); // #1
};
struct B:A{
template<class U>
operator U&&(); // #2
};
int main(){
B b;
int a = b; // #3
b.operator int(); // #4
}
根據 [class.member.lookup] p7
如果 N 是非依賴轉換函數 ID,則考慮作為 T 成員的轉換 function 模板。 對於每個這樣的模板 F,構造查找集
S(t,T)
,考慮 function 模板聲明只有當它對應於 F 的聲明([basic.scope.scope])時才具有名稱t
。 結果中包括每個此類查找集的聲明集的成員,這些成員不應是無效集。
#1
和#2
都包含在查找結果中,而不管#3
和#4
中的conversion-function-id是什么。 #3
的診斷是我們所期望的,換句話說, #1
和#2
都是候選者,並且無法區分。
但是,在處理#4
時,實現似乎只將#2
視為唯一候選者。 如上所述, #3
或#4
的候選集應該相同。 我是否忽略了其他一些導致差異的規則? 或者,它是實現中的錯誤嗎?
實施只是沒有跟上新的(已澄清的)規則,這些規則必須在 2020 年大量發明,因為沒有發布的標准版本以任何合理的方式描述轉換 function 模板的查找。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.