微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重载函数模板

如何解决重载函数模板

以下示例摘自《C++ 模板 - 完整指南》一书:

template<typename T1,typename T2>
auto max (T1 a,T2 b)
{
    return b < a ? a : b;
}

template<typename RT,typename T1,typename T2>
RT max (T1 a,T2 b)
{
    return b < a ? a : b;
}    

然后是:

现在,我们可以调用max(),例如,如下:

auto a = ::max(4,7.2); // uses first template
auto b = ::max<long double>(7.2,4); // uses second template

但是,在调用时:

auto c = ::max<int>(4,7.2); // ERROR: both function templates match

两个模板匹配,导致重载解析过程 通常选择 none 并导致歧义错误

我知道两个模板都匹配 "c" (::max)。尽管如此,我在 Clang、GCC 和 MSVC 上测试了代码,并且在所有这些代码中,它编译得很好,没有警告。并且似乎两个模板也匹配“b”(::max),而不仅仅是第二个(https://godbolt.org/z/f7TqEhh7o)。为什么作者说只有在“c”中两个函数模板才匹配?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。