下面我有3个原型。我希望第一个(注释掉)可以工作,但这是唯一一个不工作的(请参阅代码中的注释以了解错误)。更令我惊讶的是,以下两种方法中的任何一种都有效,即使两者都存在。
/////////////////////////////////////////////////
// Prototypes:
/////////////////////////////////////////////////
// Causes "ambiguous call to overloaded function" at the call site when when one or both
// of the below prototypes is also present. Otherwise causes unresolves external
//template<typename T> void func();
// Okay, can have this one AND/OR the below declaration
template<typename T> typename std::enable_if<std::is_integral<T>::value, void>::type func();
// Also okay, can have this one AND/OR the above declaration
template<typename T> typename std::enable_if<std::is_integral<T>::value, void>::type func();
int main()
{
func<int>();
}
/////////////////////////////////////////////////
// Definitions:
/////////////////////////////////////////////////
template<typename T> typename std::enable_if<std::is_integral<T>::value, void>::type func() {}
template<typename T> typename std::enable_if<!std::is_integral<T>::value, void>::type func() {}
哪个是正确的原型,为什么第一个不起作用?我正在使用 VS2010 和 VS2012