value_to
Convert a value to an object of type T.
Synopsis
Defined in header <boost/json/value_to.hpp>.
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.
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 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 try_value_to_tag<T> if the returned result contains a value, that value is returned as the result of the conversion. Otherwise, an exception of type boost::system::system_error that stores the error is thrown.
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 |
|---|---|
|
The type to convert to. |
|
The type of context passed to the conversion function. |
Return Value
jv converted to T.
Parameters
| Name | Description |
|---|---|
|
The |
|
Context passed to the conversion function. |
See Also
Convenience header <boost/json.hpp>