diff --git a/src/3rdparty/mapbox-gl-native/deps/geojson/0.5.1/include/mapbox/geojson_impl.hpp b/src/3rdparty/mapbox-gl-native/deps/geojson/0.5.1/include/mapbox/geojson_impl.hpp
index 621a86cdf..0de64b5f1 100644
--- a/src/3rdparty/mapbox-gl-native/deps/geojson/0.5.1/include/mapbox/geojson_impl.hpp
+++ b/src/3rdparty/mapbox-gl-native/deps/geojson/0.5.1/include/mapbox/geojson_impl.hpp
@@ -3,6 +3,7 @@
 #include <mapbox/geojson.hpp>
 #include <mapbox/geojson/rapidjson.hpp>
 
+#include <memory>
 #include <rapidjson/document.h>
 #include <rapidjson/writer.h>
 #include <rapidjson/stringbuffer.h>
@@ -418,6 +419,15 @@ struct to_value {
         return result;
     }
 
+    rapidjson_value operator()(const std::shared_ptr<std::vector<value>>& array) {
+        rapidjson_value result;
+        result.SetArray();
+        for (const auto& item : *array) {
+            result.PushBack(value::visit(item, *this), allocator);
+        }
+        return result;
+    }
+
     rapidjson_value operator()(const std::unordered_map<std::string, value>& map) {
         rapidjson_value result;
         result.SetObject();
@@ -432,6 +442,21 @@ struct to_value {
         }
         return result;
     }
+
+    rapidjson_value operator()(const std::shared_ptr<std::unordered_map<std::string, value>>& map) {
+        rapidjson_value result;
+        result.SetObject();
+        for (const auto& property : *map) {
+            result.AddMember(
+                rapidjson::GenericStringRef<char> {
+                    property.first.data(),
+                    rapidjson::SizeType(property.first.size())
+                },
+                value::visit(property.second, *this),
+                allocator);
+        }
+        return result;
+    }
 };
 
 template <>
diff --git a/src/3rdparty/mapbox-gl-native/src/mbgl/style/expression/value.cpp b/src/3rdparty/mapbox-gl-native/src/mbgl/style/expression/value.cpp
index ddf1ff0ca..4c7235905 100644
--- a/src/3rdparty/mapbox-gl-native/src/mbgl/style/expression/value.cpp
+++ b/src/3rdparty/mapbox-gl-native/src/mbgl/style/expression/value.cpp
@@ -1,3 +1,4 @@
+#include <memory>
 #include <rapidjson/writer.h>
 #include <rapidjson/stringbuffer.h>
 #include <mbgl/style/expression/value.hpp>
@@ -84,6 +85,15 @@ struct FromMBGLValue {
         return result;
     }
     
+    Value operator()(const std::shared_ptr<std::vector<mbgl::Value>>& v) {
+        std::vector<Value> result;
+        result.reserve(v->size());
+        for(const auto& item : *v) {
+            result.emplace_back(toExpressionValue(item));
+        }
+        return result;
+    }
+    
     Value operator()(const std::unordered_map<std::string, mbgl::Value>& v) {
         std::unordered_map<std::string, Value> result;
         result.reserve(v.size());
@@ -93,6 +103,15 @@ struct FromMBGLValue {
         return result;
     }
     
+    Value operator()(const std::shared_ptr<std::unordered_map<std::string, mbgl::Value>>& v) {
+        std::unordered_map<std::string, Value> result;
+        result.reserve(v->size());
+        for(const auto& entry : *v) {
+            result.emplace(entry.first, toExpressionValue(entry.second));
+        }
+        return result;
+    }
+
     Value operator()(const std::string& s) { return s; }
     Value operator()(const bool b) { return b; }
     Value operator()(const NullValue) { return Null; }
