當我遇到SFINAE的示例代碼時,我正在學習一些C++習慣用法,我對代碼感到困惑。沒有定義的類的功能不會導致錯誤
說明:is_ptr()
沒有定義。
我自己編譯代碼,沒有關於函數定義不足的編譯器錯誤,爲什麼?
sizeof()
被用在其中一個調用上,它顯然是在函數的返回值上執行的,但是再次沒有定義。這怎麼可能?template <typename T> struct is_pointer { template <typename U> static char is_ptr(U*); template <typename X, typename Y> static char is_ptr(X Y::*); template <typename U> static char is_ptr(U (*)()); static double is_ptr(...); static T t; enum {value = sizeof(is_ptr(t)) == sizeof(char)}; };
發佈代碼**不是**圖片,而是代碼格式文本! –
你有沒有在某個地方的模板類的instatiation? – user0042
我現在在移動設備上,因此我無法粘貼代碼。 我唯一使用的是is_pointer ::主函數中的值 –
user3414321