此問題與this問題有關。以下代碼編譯了精美的VC9編譯器,但是在與Comeau在線編譯時出現錯誤。任何人都可以告訴我哪一個是正確的,錯誤的含義是什麼?隱式類型轉換 - 編譯錯誤
error: ambiguous "?" operation: second operand of type "TypesafeBool" can be converted to third operand type "bool", and vice versa TypesafeBool b = (1==1) ? f() : false;
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 ++的情況下,我得到的錯誤是'錯誤:操作數爲?:具有不同類型'TypesafeBool'和'bool' – 2010-08-20 09:42:13
構造函數應該明確的一個很好的示例 – mukeshkumar 2010-08-20 10:01:38