6 #ifndef QITYPE_DETAIL_OPTIONALTYPEINTERFACE_HXX
7 #define QITYPE_DETAIL_OPTIONALTYPEINTERFACE_HXX
11 #include <boost/optional.hpp>
13 #if defined(__cpp_lib_optional) && defined(__has_include)
14 # if __has_include(<optional>)
16 # define QI_HAS_STD_OPTIONAL 1
18 # define QI_HAS_STD_OPTIONAL 0
21 # define QI_HAS_STD_OPTIONAL 0
36 bool hasValue(
void* storage)
override;
38 void set(
void** storage,
void* valueStorage)
override;
39 void reset(
void** storage)
override;
49 _valueType = typeOf<ValueType>();
62 return static_cast<bool>(opt);
88 #if QI_HAS_STD_OPTIONAL
93 template<>
class TypeImpl<boost::none_t>:
public TypeImpl<void> {};
94 #if QI_HAS_STD_OPTIONAL
95 template<>
class TypeImpl<std::nullopt_t>:
public TypeImpl<void> {};
99 #endif // QITYPE_DETAIL_OPTIONALTYPEINTERFACE_HXX
virtual void * ptrFromStorage(void **)=0
AnyReference value(void *storage) override
Get the optional value or a default constructed AnyReference if no value is set.
typename O::value_type ValueType
OptionalTypeInterfaceImpl()
#define _QI_BOUNCE_TYPE_METHODS(Bounce)
Implement all methods of Type as bouncers to Bouncer.
TypeInterface * _valueType
void reset(void **storage) override
Resets the optional value, making the optional empty.
TypeInterface * valueType() override
Get the type of the optional element.
void set(void **storage, void *valueStorage) override
Set the optional value.
bool hasValue(void *storage) override
Return true if the optional has a value, false if not.