27 optional() : data_(), valid_(
false) { }
28 optional(
const value_type& data) : data_(data), valid_(
true) { }
29 optional(value_type&& data) : data_(data), valid_(
true) { }
36 optional& operator=(
const value_type& data) { data_ = data; valid_ =
true;
return *
this; }
37 optional& operator=(value_type&& data) { data_ = data; valid_ =
true;
return *
this; }
39 value_type& operator+=(
const value_type& data) { assert(valid_); data_ += data;
return data_; }
40 value_type& operator-=(
const value_type& data) { assert(valid_); data_ += data;
return data_; }
41 value_type& operator*=(
const value_type& data) { assert(valid_); data_ += data;
return data_; }
42 value_type& operator/=(
const value_type& data) { assert(valid_); data_ += data;
return data_; }
43 value_type& operator%=(
const value_type& data) { assert(valid_); data_ += data;
return data_; }
45 value_type& operator<<=(
const value_type& data) { assert(valid_); data_ <<= data;
return data_; }
46 value_type& operator>>=(
const value_type& data) { assert(valid_); data_ >>= data;
return data_; }
47 value_type& operator|=(
const value_type& data) { assert(valid_); data_ |= data;
return data_; }
48 value_type& operator&=(
const value_type& data) { assert(valid_); data_ &= data;
return data_; }
49 value_type& operator^=(
const value_type& data) { assert(valid_); data_ ^= data;
return data_; }
51 [[nodiscard]]
bool operator()()
const {
return valid_; }
53 operator value_type&() { assert(valid_);
return data_; }
54 operator const value_type&()
const { assert(valid_);
return data_; }
56 value_type* operator->() { assert(valid_);
return &data_; }
57 const value_type* operator->()
const { assert(valid_);
return &data_; }
59 value_type& operator*() { assert(valid_);
return data_; }
60 const value_type& operator*()
const { assert(valid_);
return data_; }
62 void reset() { valid_ =
false; }