boost::optionalの説明でも書かれていますが、一応メモ。
boost::triboolは3値論理と言われるものを表現するための型です。
一般の論理値、true, falseに加えて、indeterminate(不定)というものが加わっています。
これはboost::optional
もちろん、これら二つの間には目的の大きな差異があります。
しかしながらこれらの違いとして、その他にも
1. 初期化の違い
2. 呼び出しの違い
3. 暗黙の変換の有無
が存在しています。(もちろん、論理演算を行う場合も結果が異なりますがそれは割愛します。)
初期化の違い
初期化の違いとしてはoptional
しかし、triboolはfalseとなっています。
呼び出しの違い
呼び出しの違いも上記のコードを見ると分かると思います。
基本的にはtriboolの場合は普通に呼び出すことでindeterminate以外の値の判定ができます。indeterminateの判定は別に用意されています。
一方 optional
暗黙の変換の有無
暗黙の変換はoptionalで起こります。つまり、bool型にoptional
つまりoptional
某書籍でoptional
今回はそれを調べるために試してみたのですが、その書籍に書かれているような状況よりもむしろ、最後に挙げた暗黙の変換による問題がより注意すべきなのかもしれません。