【发布时间】:2010-08-20 09:31:44
【问题描述】:
此问题与this 问题有关。下面的代码可以很好地编译 VC9 编译器,但是在使用 Comeau 在线编译时会报错。谁能告诉我哪个是正确的,错误的含义是什么?
错误:模棱两可的“?”操作:第二 “TypesafeBool”类型的操作数可以是 转换为第三个操作数类型 "bool",反之亦然 TypesafeBool b = (1==1) ? f() : 错误;
class TypesafeBool
{
private:
bool m_bValue;
struct Bool_ {
int m_nValue;
};
typedef int Bool_::* bool_;
inline bool_ True() const { return &Bool_::m_nValue; }
inline bool_ False() const { return 0; }
public:
TypesafeBool( const bool bValue ) : m_bValue( bValue ){}
operator bool_() const { return m_bValue ? True() : False(); }
};
TypesafeBool f()
{
return TypesafeBool(true);
}
int main()
{
TypesafeBool b = (1==1) ? f() : false;
}
【问题讨论】:
-
我认为 Comeau 在这种情况下是正确的。甚至 g++ 和 Clang++ 也会给出同样的错误。我在 g++ 的情况下得到的错误是
error: operands to ?: have different types 'TypesafeBool' and 'bool -
应该明确构造函数的好例子之一
标签: c++ compiler-errors type-conversion