@Rのこの答え。Martinho Fernandesは、単純な
explicit operator bool() const;
回答の標準的な引用によると§4 [conv] p3
:
式 e は、何らかの発明された一時変数(§8.5)に対して
T
、宣言が適切な形式である場合にのみ、暗黙的に型に変換できます。特定の言語構造では、式をブール値に変換する必要があります。そのようなコンテキストに現れる式は、何らかの発明された一時変数 t (§8.5) に対して、宣言が整形式である場合に限り、に文脈的に変換され、整形式であると言われます (§8.5)。T t=e;
t
e
bool
bool 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
)
タイトルの仮定は正しいですか?潜在的な欠点を見逃さなかったことを願っています。