【发布时间】:2012-01-09 14:15:32
【问题描述】:
以下代码是最简单的形式:
struct X {
operator char () const { return 'a'; }
};
int main ()
{
X obj, *p = &obj;
char a = *p; // ok
char c = (true)? *p : 'z';
}
This code 给出编译器错误,
错误:? 的操作数:具有不同的类型'X'和'char'
当类型转换运算符的class X 没有歧义时,为什么*p 不解析为char?
这样的虚假错误信息是正确的还是 g++ 错误?
[更新注意:有趣的是this scenario doesn't generate such error]
【问题讨论】:
-
我使用 g++ 4.4.5 构建它,带有标志 -Wall 和 -Wextra,并且没有收到错误或警告。
-
哪个编译器会产生这个错误?在 g++ 4.6.1 上运行良好
标签: c++ compiler-errors conditional-operator typecasting-operator