+// associative containers
+template <typename C>
+struct DynamicConverter<
+ C,
+ typename std::enable_if<
+ dynamicconverter_detail::is_container<C>::value &&
+ dynamicconverter_detail::is_associative<C>::value>::type> {
+ static C convert(const dynamic& d) {
+ C ret; // avoid direct initialization due to unordered_map's constructor
+ // causing memory corruption if the iterator throws an exception
+ if (d.isArray()) {
+ ret.insert(
+ dynamicconverter_detail::conversionIterator<C>(d.begin()),
+ dynamicconverter_detail::conversionIterator<C>(d.end()));
+ } else if (d.isObject()) {
+ ret.insert(
+ dynamicconverter_detail::conversionIterator<C>(d.items().begin()),
+ dynamicconverter_detail::conversionIterator<C>(d.items().end()));
+ } else {
+ throw TypeError("object or array", d.type());
+ }
+ return ret;
+ }
+};
+