模板參數中的enable_if_t重定義錯誤
在C中,使用enable_if_t的enable_if的新語法在將程式碼移植到新語法。以下程式碼示範了這個問題:
template<typename T, typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr> void f() { } template<typename T, typename = std::enable_if_t<std::is_same<int, T>::value>> void g() { }
使用GCC (5.2) 編譯會產生錯誤:
「錯誤:重新定義'template
錯誤原因
出現錯誤是因為兩個模板函數 f 和 g 具有相同的模板類型 void()。儘管它們的第二個模板參數具有不同的預設值,但它們仍然具有相同的類型。
解決方案
要解決此問題,請更新語法以使用 std:: enable_if_t 具有不同的第二個參數類型。例如:
template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>* = nullptr> void f() { } template<typename T, std::enable_if_t<std::is_same<double, T>::value, double>* = nullptr> void g() { }
此修改可確保兩個範本函數具有不同的範本類型,並消除重定義錯誤。
以上是為什麼我在模板參數中遇到'enable_if_t”的重新定義錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!