首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数模板重载clang++

函数模板重载clang++
EN

Stack Overflow用户
提问于 2013-10-02 06:44:14
回答 2查看 264关注 0票数 13

g++ 4.8.1和clang++ 3.4给出了下一个代码的不同结果:

代码语言:javascript
复制
// simplified code from a Logger module
#include <iostream>

template<class T> void tf(const T*) {  // clang++ 
    std::cout << "void tf(const T*)\n"; 
}

template<class T> void tf(T) {  // g++
    std::cout << "void tf(T)\n"; 
}

int main(){ 
    typedef std::ios_base& (*ph)(std::ios_base&);
    ph p = std::hex;
    tf(p); // or just tf(std::hex)
}

我不知道哪个变体是正确的(C++ 03)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-10 04:59:21

我试着把这个当成错误提交给llvm bugzill。答案是:

这是GCC的窃听器。请参见: active.html#1584

票数 4
EN

Stack Overflow用户

发布于 2013-10-02 06:49:31

函数指针不是指向对象的指针,在const中谈论函数指针的-ness在C++中是没有意义的。

IMO g++是对的,因为hex是函数的指针,而不是指向任何东西的const *

在第一种情况下,模板参数不是“指针”,而是“指向对象的指针”。

在C++中没有一个通用的“指针”.您有函数的指针、对象的指针或成员的指针。这三者都有不同的规则,而且与其他规则不相容。

不可否认的是,空指针会带来一些混乱.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19131309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档