问题描述
在下面的示例中,函数模板(quartic
)使用重载的全局函数(square
)。编译时,仅考虑在模板本身之前声明的重载,因此即使使用模板之前声明了square(int)
,也使用square(double)
而不是square(double)
。
int square(int);
template<typename T>
T quartic(T value) {
return square(square(value));
}
double square(double);
double x(double y) {
return quartic(4.0); // Uses square(int),wanted square(double)
}
有没有一种方法可以使square
的哪个重载版本的分辨率取决于使用模板时可用的内容,以便用户可以为任何类型square
实现T
}他使用了吗?
注意:奇怪的是,MSVC将使用square(double)
,而GCC,clang和icc使用square(int)
。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)