@@ -4943,6 +4943,23 @@ class basic_json
49434943 return {it, res.second };
49444944 }
49454945
4946+ // / helper for insertion of an iterator (supports GCC 4.8+)
4947+ template <typename ... Args>
4948+ iterator insert_iterator (const_iterator pos, Args&& ... args)
4949+ {
4950+ iterator result (this );
4951+ assert (m_value.array != nullptr );
4952+
4953+ auto insert_pos = std::distance (m_value.array ->begin (), pos.m_it .array_iterator );
4954+ m_value.array ->insert (pos.m_it .array_iterator , std::forward<Args>(args)...);
4955+ result.m_it .array_iterator = m_value.array ->begin () + insert_pos;
4956+
4957+ // For GCC 4.9+ only, this could become:
4958+ // result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val);
4959+
4960+ return result;
4961+ }
4962+
49464963 /* !
49474964 @brief inserts element
49484965
@@ -4977,9 +4994,7 @@ class basic_json
49774994 }
49784995
49794996 // insert to array and return iterator
4980- iterator result (this );
4981- result.m_it .array_iterator = m_value.array ->insert (pos.m_it .array_iterator , val);
4982- return result;
4997+ return insert_iterator (pos, val);
49834998 }
49844999
49855000 JSON_THROW (type_error::create (309 , " cannot use insert() with " + std::string (type_name ())));
@@ -5030,9 +5045,7 @@ class basic_json
50305045 }
50315046
50325047 // insert to array and return iterator
5033- iterator result (this );
5034- result.m_it .array_iterator = m_value.array ->insert (pos.m_it .array_iterator , cnt, val);
5035- return result;
5048+ return insert_iterator (pos, cnt, val);
50365049 }
50375050
50385051 JSON_THROW (type_error::create (309 , " cannot use insert() with " + std::string (type_name ())));
@@ -5094,12 +5107,7 @@ class basic_json
50945107 }
50955108
50965109 // insert to array and return iterator
5097- iterator result (this );
5098- result.m_it .array_iterator = m_value.array ->insert (
5099- pos.m_it .array_iterator ,
5100- first.m_it .array_iterator ,
5101- last.m_it .array_iterator );
5102- return result;
5110+ return insert_iterator (pos, first.m_it .array_iterator , last.m_it .array_iterator );
51035111 }
51045112
51055113 /* !
@@ -5141,9 +5149,7 @@ class basic_json
51415149 }
51425150
51435151 // insert to array and return iterator
5144- iterator result (this );
5145- result.m_it .array_iterator = m_value.array ->insert (pos.m_it .array_iterator , ilist.begin (), ilist.end ());
5146- return result;
5152+ return insert_iterator (pos, ilist.begin (), ilist.end ());
51475153 }
51485154
51495155 /* !
0 commit comments