函数的重载分辨率取决于模板参数

问题描述

在下面的示例中,函数模板(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 (将#修改为@)