@Rのこの答え。Martinho Fernandesは、単純な
explicit operator bool() const;
回答の標準的な引用によると§4 [conv] p3:
式 e は、何らかの発明された一時変数(§8.5)に対して
T、宣言が適切な形式である場合にのみ、暗黙的に型に変換できます。特定の言語構造では、式をブール値に変換する必要があります。そのようなコンテキストに現れる式は、何らかの発明された一時変数 t (§8.5) に対して、宣言が整形式である場合に限り、に文脈的に変換され、整形式であると言われます (§8.5)。T t=e;teboolbool t(e);
強調表示された部分は、@R として "暗黙の明示的なキャスト" (標準では "コンテキスト変換" と呼ばれます) を明確に示しています。マルティニョはそう言った。
「暗黙の明示的なキャスト」を必要とする「特定の言語構造」は次のようです。
if,while,for(§6.4 [stmt.select] p4)- 二項論理演算子
&&and||(§5.14 [expr.log.and/or] p1両方の場合) - 論理否定演算子
!(§5.3.1 [expr.unary.op] p9) - 条件演算子
?:(§5.14 [expr.cond] p1) static_assert(§7 [dcl.dcl] p4)noexcept(§15.4 [except.spec] p2)
タイトルの仮定は正しいですか?潜在的な欠点を見逃さなかったことを願っています。