From 6667d0aa39b23775387610059fe04ee8519f4127 Mon Sep 17 00:00:00 2001 From: dragon Date: Sat, 20 Feb 2016 22:21:11 +0800 Subject: [PATCH 1/3] support GCC 4.8.1 --- src/json.hpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 6b4c92d59..0482fe1de 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -1,4 +1,4 @@ -/* +/* __ _____ _____ _____ __| | __| | | | JSON for Modern C++ | | |__ | | | | | | version 2.0.0 @@ -4873,7 +4873,13 @@ class basic_json // insert to array and return iterator iterator result(this); assert(m_value.array != nullptr); - result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); + #if defined(__GNUC__) && __GNUC__ <= 4 && __GNUC_MINOR__ <= 8 + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, cnt, val); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + #else + result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); + #endif return result; } else @@ -4939,10 +4945,19 @@ class basic_json // insert to array and return iterator iterator result(this); assert(m_value.array != nullptr); - result.m_it.array_iterator = m_value.array->insert( + + #if defined(__GNUC__) && __GNUC__ <= 4 && __GNUC_MINOR__ <= 8 + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, + first.m_it.array_iterator, + last.m_it.array_iterator); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + #else + result.m_it.array_iterator = m_value.array->insert( pos.m_it.array_iterator, first.m_it.array_iterator, last.m_it.array_iterator); + #endif return result; } @@ -4987,7 +5002,13 @@ class basic_json // insert to array and return iterator iterator result(this); assert(m_value.array != nullptr); - result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); + #if defined(__GNUC__) && __GNUC__ <= 4 && __GNUC_MINOR__ <= 8 + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, ilist); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + #else + result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); + #endif return result; } From 6756b47d57e38e26b2f3064ca8f3532e068af405 Mon Sep 17 00:00:00 2001 From: dragon Date: Mon, 22 Feb 2016 23:46:56 +0800 Subject: [PATCH 2/3] support gcc 4.8.1 --- src/json.hpp.re2c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 6edc4ab14..3aeff624b 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -4873,7 +4873,13 @@ class basic_json // insert to array and return iterator iterator result(this); assert(m_value.array != nullptr); - result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); + #if defined(__GNUC__) && __GNUC__ <= 4 && __GNUC_MINOR__ <= 8 + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, cnt, val); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + #else + result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); + #endif return result; } else @@ -4939,10 +4945,18 @@ class basic_json // insert to array and return iterator iterator result(this); assert(m_value.array != nullptr); - result.m_it.array_iterator = m_value.array->insert( + #if defined(__GNUC__) && __GNUC__ <= 4 && __GNUC_MINOR__ <= 8 + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, + first.m_it.array_iterator, + last.m_it.array_iterator); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + #else + result.m_it.array_iterator = m_value.array->insert( pos.m_it.array_iterator, first.m_it.array_iterator, last.m_it.array_iterator); + #endif return result; } @@ -4987,7 +5001,13 @@ class basic_json // insert to array and return iterator iterator result(this); assert(m_value.array != nullptr); - result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); + #if defined(__GNUC__) && __GNUC__ <= 4 && __GNUC_MINOR__ <= 8 + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, ilist); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + #else + result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); + #endif return result; } From fb686a200b0b0783eab3241fbc8c16b7fcc125b9 Mon Sep 17 00:00:00 2001 From: dragon Date: Mon, 22 Feb 2016 23:53:57 +0800 Subject: [PATCH 3/3] support gcc 4.8.1 --- src/json.hpp.re2c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 3aeff624b..46e9a3158 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -4874,9 +4874,9 @@ class basic_json iterator result(this); assert(m_value.array != nullptr); #if defined(__GNUC__) && __GNUC__ <= 4 && __GNUC_MINOR__ <= 8 - auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); - m_value.array->insert(pos.m_it.array_iterator, cnt, val); - result.m_it.array_iterator = m_value.array->begin() + insert_pos; + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, cnt, val); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; #else result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); #endif