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.
In order to perform the conversion the function selects an appropriate implementation based on the types T and Context (if provided).
-
If
Contextis available and is notstd::tuple<C...>-
check if
use_category<T, Context>::valueis notconversion_category::unknown; otherwise -
check if a
tag_invokeoverload from the list below that takes aContext const&exists.
-
-
Otherwise, if
Contextis available, and isstd::tuple<C...>repeat steps 1 and 2 recursively for everyCuntil either step 1.a or 1.b succeeds for someC. -
Failing that,
-
check if
use_category<T>::valueis notconversion_category::unknown; otherwise -
check if a
tag_invokeoverload from the list below that takes only 2 parameters exists; otherwise -
check if
Tis one ofvalue,array,object, orstring; otherwise -
check if
Tmatches one of the categories of types described in the table "Conversion categories" in Value Conversion section.
-
These steps determine both the appropriate category of conversion for T, and, if necessary, the effective context C that will be used for conversion. If the category is selected on steps 1.a, 3.a, 3.c, or 3.d, the library provides a suitable conversion implementation. If the category is selected on steps 2.b or 3.b, then a user-provided tag_invoke overload is used.
The overloads of tag_invoke that will be considered by this function are in the following list. Overloads that appear higher in the list have higher priority.
template< class FullContext >
result<T> tag_invoke( try_value_to_tag<T>, const value&, const Context&, const FullContext& );
template< class FullContext >
T tag_invoke( value_to_tag<T>, const value&, const Context&, const FullContext& );
result<T> tag_invoke( try_value_to_tag<T>, const value&, const Context& );
T tag_invoke( value_to_tag<T>, const value&, const Context& );
result<T> tag_invoke( try_value_to_tag<T>, const value& );
T tag_invoke( value_to_tag<T>, const value& );
For tag_invoke overloads that take a parameter of type try_value_to_tag<T> the object returned by a call to that overload is returned by the function as the result of the conversion. For overloads that take a parameter of type value_to_tag<T> the returned object is wrapped with a result<T>.
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 |
|---|---|
|
The type to convert to. |
|
The type of context passed to the conversion function. |
Return Value
jv converted to result<T>.
Parameters
| Name | Description |
|---|---|
|
The |
|
Context passed to the conversion function. |
See Also
value_to_tag, value_to, value_from, tag_invoke: A general pattern for supporting customisable functions.
Convenience header <boost/json.hpp>