is_optional_like

## `is_optional_like`

Determine if `T` should be treated as an optional.

### Synopsis

Defined in header <boost/json/conversion.hpp>.

    template<
        class T>
    struct is_optional_like;

### Description

Optionals are serialised as `null` if empty, or as the stored type otherwise.

Given `t`, a glvalue of type `T`, if

- `decltype( t.value() )` is well-formed and isn’t a void type; and

- `t.reset()` is well-formed;

then the trait provides the member constant `value` that is equal to `true`. Otherwise, `value` is equal to `false`.

Users can specialize the trait for their own types if they don’t want them to be treated as optionals. For example:

    namespace boost {
    namespace json {

    template <>
    struct is_optional_like<your::optional> : std::false_type
    { };

    } // namespace boost
    } // namespace json

### Types Satisfying the Trait

`std::optional`, `boost::optional`.

Convenience header <boost/json.hpp>.

Edit this page