C++重载解析、用户定义的转换和函数模板
C++ Overload Resolution, userdefined conversion and function template
使用g++3.4和4.7时,我观察到以下奇怪的行为:
如果需要用户定义的转换,则函数模板不匹配,而普通函数会匹配。我在C++98标准中找不到相应的规则。g++正确吗?还是一个bug?
template <class T>
int x(auto_ptr_ref<T> p)
{
return 1;
}
// this would match
/*
int x(auto_ptr_ref<int> p)
{
return 2;
}
*/
void dummy()
{
cout << x(auto_ptr<int>()) << endl;
}
GCC是正确的,模板参数推导不考虑隐式转换。
类型推导不考虑隐式转换(除了上面列出的类型调整):这是重载解决的工作,稍后会发生。
对于您的代码,auto_ptr_ref
与auto_ptr
不匹配,模板参数T
的推导失败,因此根本不会考虑函数模板x()
来解决过载问题。
相关文章:
- 将显式实例化的函数模板与转换匹配
- 将函数的参数 - 签名从使用 'std::function<T>' 转换为模板参数类型
- static_cast:转换函数模板——它们真的有效吗
- 使用用户定义的转换运算符推导函数模板参数
- 为什么用户定义的转换函数模板不能有推导的返回类型?
- 如何防止函数模板中的隐式转换?
- 如何类型转换为模板成员函数参数?
- 函数模板中的无效转换错误,返回值取决于其泛型类型
- 尝试将 C++11 代码转换为 C++03 时默认函数模板参数出错
- 使用模板和部分专用化生成类型转换函数
- 非调用转换函数上的模板中的编译错误
- 是否可以在函数模板中转换参数C++?
- 如何将中的函数包装器转换为模板
- 如何从函数模板类成员内的转换算法参数指向一元运算符函数
- 将函数模板转换为函数重载集
- 将函数模板化转换为函数指针
- 函数模板,用于将字符串文本转换为 std::array
- 存在函数模板时的参数转换
- 重载转换函数模板
- c++中转换函数模板实参演绎的含义