0
如果t是char *或隱式或顯式重寫operator char *()的類,則第一個條件可正確運行。第二個條件的目標是在類型t是一個指針時,執行括號內的代碼,並且可以將t的解除引用類型轉換爲char *。第二個條件在它應該(例如char **應該評估爲true)時不成立。我究竟做錯了什麼?如何獲取模板參數的類型,當它包含一個指針?
F.Y.I:我只關心一個指針的東西,可以轉換爲一個char *像字符**,而不是與焦炭相關***,如果是有道理的。
t * Find(char * name)
{
if (std::is_convertible<t, char*>::value)
{
return 0;
}
else if (std::is_convertible<typename std::remove_pointer<t>::type, char * >::value)
{
return 0;
}
static_assert(false, "VSarray<T>::Find(char *), T is not convertable to a char *");
}
如果你在靜態斷言失敗的基礎上,每次都會觸發,無論哪個分支將被採取。 – chris
你能提供一個完整的例子來證明你的問題嗎?此外,你的'if's是編譯時間常量的條件不會阻止你的static_assert始終觸發。 – melak47
@chris你是對的,我必須在重新測試之前改變靜態斷言中的條件。 – user3141117