+struct dynamic::item_iterator : boost::iterator_adaptor<
+ dynamic::item_iterator,
+ dynamic::ObjectImpl::iterator> {
+ /* implicit */ item_iterator(base_type b) : iterator_adaptor_(b) {}
+
+ using object_type = dynamic::ObjectImpl;
+
+ private:
+ friend class boost::iterator_core_access;
+};
+
+struct dynamic::value_iterator : boost::iterator_adaptor<
+ dynamic::value_iterator,
+ dynamic::ObjectImpl::iterator,
+ dynamic> {
+ /* implicit */ value_iterator(base_type b) : iterator_adaptor_(b) {}
+
+ using object_type = dynamic::ObjectImpl;
+
+ private:
+ dynamic& dereference() const {
+ return base_reference()->second;
+ }
+ friend class boost::iterator_core_access;
+};
+