Listing 3: Deriving from a mandatory structure that wraps the data type.

template<typename Type>
struct optional_storage<Type, true>
  : public detail::mandatory<Type>
{
    typedef
    typename
    detail::mandatory<Type>::type
    type;
    optional_storage();
    optional_storage(const type &other);
};