下面的代碼失敗,英特爾C++ 2013年爲什麼這些函數模板都不匹配實例?
#include <type_traits>
#include <iostream>
template <
typename T,
typename std::enable_if<std::is_integral<T>::value>::type
>
void myfunc(T a)
{
std::cout << a << std::endl;
}
template <
typename T,
typename std::enable_if<!std::is_integral<T>::value>::type
>
void myfunc(T a)
{
std::cout << a << std::endl;
}
int main()
{
double a;
int b;
myfunc(a);
myfunc(b);
return 0;
}
以下是錯誤輸出編譯:
ConsoleApplication1.cpp(33): error : no instance of overloaded function "myfunc" matches the argument list
1> argument types are: (double)
1> myfunc(a);
1> ^
1>
1>ConsoleApplication1.cpp(34): error : no instance of overloaded function "myfunc" matches the argument list
1> argument types are: (int)
1> myfunc(b);
1> ^
1>
我要去哪裏錯了?
'std :: cout << T'?你的意思是'a'嗎? – kennytm
是的,謝謝。糾正。 –
您不能擁有void類型的模板非類型參數。告訴enable_if給你一個類型int和ptovide默認值 –