try_value_to

Convert a value to a boost::system::result.

Synopsis

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

template<
    class T,
    class Context>
result_for< T, value >::type
try_value_to(
    value const& jv,
    Context const& ctx); (1)

template<
    class T>
result_for< T, value >::type
try_value_to(
    const value& jv); (2)

Description

This function attempts to convert a value to result<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 default constructible types satisfying SequenceContainer, arrays, arithmetic types, bool, std::tuple, std::pair, std::optional, std::variant, std::nullptr_t, and structs and enums described using Boost.Describe.

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 >
result<T> tag_invoke( try_value_to_tag<T>, const value&, const Context& , const FullContext& );

or

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

or

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

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

If an error occurs during conversion, the result will store the error code associated with the error. If an exception is thrown, the function will attempt to retrieve the associated error code and return it, otherwise it will return error::exception, unless the exception type is std::bad_alloc, which will be allowed to propagate.

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.

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>