在讀 C++ Templates: The complete guide 時, page 107講到function template 的 overload時
有所謂的SFINAE原則(替換失敗並非錯誤) 舉出了2個例子
template void f(int (&)[24/(4-I)]);
template void f(int (&)[24/(4+I)]);
int main()
{
&f<4>; <-- error C2568: 'identifier' : unable to resolve function overload
}
//在VC9 (VS2008)是ok的 會顯示錯誤
template int g() { return N; }
template int g() { return *P; }
int main()
{
return g<1>();
}
// 在VC9 一樣無法過關
出現以下錯誤訊息
error C2440: 'specialization' : cannot convert from 'int' to 'int *const '
error C2973: 'g' : invalid template argument 'int'
error C2668: 'g' : ambiguous call to overloaded function
沒有留言:
張貼留言