value_to

Convert a value to an object of type T.

Synopsis

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

template<
    class T,
    class Context>
T
value_to(
    value const& jv,
    Context const& ctx); (1)

template<
    class T>
T
value_to(
    const value& jv); (2)

template<
    class T,
    class U>
T
value_to(
    U const& jv) = delete; (3)

Description

This function attempts to convert a value to T using

  • one of value's accessors, or

  • a library-provided generic conversion, or

  • a user-provided overload of tag_invoke.

Out of the box the function supports types satisfying SequenceContainer, arrays, arithmetic types, bool, std::tuple, std::pair, std::variant, std::optional, std::monostate, and std::nullopt_t.

Conversion of other types is done by calling an overload of tag_invoke found by argument-dependent lookup. Its signature should be similar to:

template< class FullContext >
T tag_invoke( value_to_tag<T>, const value&, const Context& , const FullContext& );

or

T tag_invoke( value_to_tag<T>, const value&, const Context& );

or

result<T> tag_invoke( value_to_tag<T>, const value& );

The overloads are checked for existence in that order and the first that matches will be selected.

The object returned by the function call is returned by value_to as the result of the conversion.

The ctx argument can be used either as a tag type to provide conversions for third-party types, or to pass extra data to the conversion function.

Overload (3) is deleted and participates in overload resolution only when U is not value. The overload exists to prevent unintented creation of temporary value instances, e.g.

auto flag = value_to<bool>(true);

Constraints

! std::is_reference< T >::value

Exception Safety

Strong guarantee.

Template Parameters

Type Description

T

The type to convert to.

Context

The type of context passed to the conversion function.

Return Value

jv converted to result<T>.

Parameters

Name Description

jv

The value to convert.

ctx

Context passed to the conversion function.

See Also

Convenience header <boost/json.hpp>