3
我在編譯下面的例子時遇到一個奇怪的問題。0模板函數模糊參數扣除
template<typename T>
struct identity {
typedef T type;
};
template<typename T>
void foo(typename identity<T>::type v) {}
template<typename T>
void foo(typename identity<T>::type* v) {}
int main() {
foo<int>(0);
foo<short>(0);
return 0;
}
調用foo<int>(0)
編譯,但是,當我打電話foo<short>(0)
如果爲0值或指針編譯器無法推斷。我使用身份強制顯式指定模板參數。編譯器(msvc)錯誤信息:
error C2668: 'foo': ambiguous call to overloaded function
它是編譯器錯誤嗎?