<span style="background-color: rgb(255, 255, 255);">
</span>
#include <iostream>
#include "boost/optional.hpp"
#include <cassert>
namespace bo = boost;
int main(){
// constructor
bo::optional<int> a;
bo::optional<int> b(bo::none);
assert(a == b);
assert(!a.is_initialized());
assert(!b.is_initialized());
bo::optional<int> c(3);
assert(c == 3);
assert(c.is_initialized());
bo::optional<int> d(true, 4);
assert(d == 4);
assert(d.is_initialized());
bo::optional<int> e(false, 4);
assert(e == bo::none);
assert(!e.is_initialized());
bo::optional<int> f = 1;
assert(f.is_initialized());
// member function
a = 2;
if (a){
std::cout << "a is is_initialized" << std::endl;
}
a.reset();
assert(!a);
// std::cout << a.get() << std::endl;// ERROR!程序崩溃
// std::cout << "a.value(): " << a.value() << std::endl;// 程序异常
a = 300; // 确保在使用get和value前a已经被初始化
std::cout << "a.get(): " << a.get() << std::endl;// OK
std::cout << "operator * : " << *a << std::endl;
// try ... catch
std::cout << "a.value(): " << a.value() << std::endl;
// operator->()
std::cin.get();
}