...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Determine if T
can be treated
like a 1-to-1 mapping during conversions.
Defined in header <boost/json/conversion.hpp>
template< class T> struct is_map_like
Given t
, a glvalue of type
T
, if
is_sequence_like<T>::value
is true
;
and
It
denoting
decltype(std::begin(t))
,
and types K
and M
, std::iterator_traits<It>::value_type
denotes std::pair<K, M>
;
and
std::is_string_like<K>::value
is true
;
and
v
, a glvalue of
type V
, and E
, the type denoted by decltype(t.emplace(v))
,
std::is_tuple_like<E>::value
is true
;
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 like mappings. For example:
namespace boost { namespace json { template <> struct is_map_like<your::map> : std::false_type { }; } // namespace boost } // namespace json
The restriction for t.emplace()
return type ensures that the container does not accept duplicate keys.
Convenience header <boost/json.hpp>