2008年5月31日 星期六

在讀 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

沒有留言: