#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
コンパイルしません: 'return': cannot convert from 'std::optional<int>' to 'bool'
参考資料を参考にして説明を探したのですが、大丈夫なので読んでみました。
暗黙的な変換は、あるタイプT1の式がそのタイプを受け入れないが他のタイプT2を受け入れるコンテキストで使用される場合は常に実行されます。特に:
- T2をパラメーターとして宣言された関数を呼び出すときに、式が引数として使用される場合。
- 式がT2を期待する演算子でオペランドとして使用される場合。
- T2を返す関数のreturnステートメントを含む、T2型の新しいオブジェクトを初期化するとき;
- 式がswitchステートメントで使用されている場合(T2は整数型)。
- 式がifステートメントまたはループで使用される場合(T2はブール値)。
operator bool()
、のstd::optional
場合explicit
。