それは後半の答えですが、私は短い時間のためにスタックオーバーフローにのみ有効だと私はちょうどあなたの質問を見つけました。私はBoost.Operatorsのメンテナで、2003年12月にはremovedbool_testable
に戻ってしまい、誤ってリリースされる可能性があります。
サム・パーティントンは、数週間前にそれを提案し、私は、CVSリポジトリにこれを追加しました。それは当初は有望に見えましたが、すぐに問題が現れました。
メイン問題、IIRC、クラスT
boost::bool_testable<T>
由来の変換検出と関連していました。 bool
に変換できますが、int
に変換できないクラスは、boost::is_convertible<T,int>::value == false
になりますが、あいまいになり、コンパイルに失敗しました。
他にも問題があり、そのうちの1つは別の問題を解消することを暗示していました。 1つの例には、ユーザがbool
と自身のoperator int()
に明示的に変換したかったタイプが含まれていました。
長いストーリーは短いので、十分に頑強にする方法を考え出すことはありませんでした。疑わしい場合には、潜在的な問題と比較して、利益が小さすぎる(コピー〜ペーストコードの5行まで安全)、それを安全にプレイすることにしたため、取り除いた。
これを取り除いた後も問題は解決されず、最終的にSafe-Bool-Idiomコードをコピーしてクラスにコピーし始めました。あるいは、ある時点でexplicit operator bool()
が利用可能になった。
つまり、手動で行をコピーするだけの方がいいでしょう。私はそれがエレガントな解決策ではないことを知っていますし、コピー貼り付けも気に入らないのですが、それ以外の選択肢はすべて悪いことでした。私はbool_testable`を追加しましたが、その後、直後に削除され、リリース([参照]に存在しなかった `検索によると
(http://boost.2283326.n4.nabble.com/operator-safe-bool-td2617427 .html))。どんなバージョンのブーストでそれを見たのですか? –