template<class Value>
class Optional {
public:
+ typedef Value value_type;
+
static_assert(!std::is_reference<Value>::value,
"Optional may not be used with reference types");
static_assert(!std::is_abstract<Value>::value,
"Optional may not be used with abstract types");
- Optional()
+ Optional() noexcept
: hasValue_(false) {
}