簡體   English   中英

轉換function的顯式調用和隱式調用有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM