如果生成的转换类型由于基类匹配而允许函数调用,我的编译器(GCC 4.7)似乎不会发出隐式类型转换,即转换结果A
是AB
.
class AB {};
class A: public AB
{
public:
A(float i) {}
A() {}
A(const A& rhs) {}
A(A&& rhs) {}
};
AB operator*(const AB& lhs,const AB& rhs)
{
// Return default constructed AB
}
void foo() {
A a;
auto tmp = 2.0 * a; // This fails because no conversion rule was found.
}
这是 C++ 语言的一个特性吗?如果是这样,在什么情况下不匹配基类会更好。
请不要回答可怜的编译器有很多事情要做,与基类匹配会太多。
编辑
c.cc:51:20: error: no match for ‘operator*’ in ‘2.0e+0 * a’
c.cc:51:20: note: candidate is: c.cc:42:1: note: AB operator*(const
AB&, const AB&) c.cc:42:1: note: no known conversion for argument 1
from ‘double’ to ‘const AB&’ c.cc:51:20: error: unable to deduce
‘auto’ from ‘<expression error>’