2つありますused-defined implicit conversion chains
。
初め -class -> bool -> no conversion
2番 -class -> int -> bool
n3337 4/2
注:特定のタイプの式は、いくつかのコンテキストで暗黙的に他のタイプに変換されます。
— ifステートメントまたは反復ステートメント(6.4、6.5)の条件で使用される場合。宛先タイプはboolです。
n3337 4/3
いずれかの暗黙的な変換の効果は、宣言と初期化を実行し、変換の結果として一時変数を使用することと同じです。
引用符は本当にそれを意味します
if (class_var)
は
if (bool _ = class_var)
n3337 13.3.3 / 1
これらの定義を前提として、すべての引数iについて、ICSi(F1)がICSi(F2)よりも悪い変換シーケンスではない場合、実行可能な関数F1は別の実行可能な関数F2よりも優れた関数であると定義されます。
—コンテキストは、ユーザー定義の変換(8.5、13.3.1.5、および13.3.1.6を参照)による初期化と、F1の戻りタイプから宛先タイプ(つまり、初期化されるエンティティのタイプ)への標準変換シーケンスです。 F2の戻りタイプから宛先タイプへの標準変換シーケンスよりも優れた変換シーケンスです。[ 例:
struct A {
A();
operator int();
operator double();
} a;
int i = a; // a.operator int() followed by no conversion
//is better than a.operator double() followed by
//a conversion to int
float x = a; //ambiguous: both possibilities require conversions,
//and neither is better than the other
—終了例
したがって、コンパイラはを選択する必要がありますoperator bool
。class -> bool -> no standart conversion
class -> int -> standard conversion to bool