diff --git a/platform/android/src/geojson/multi_point.cpp b/platform/android/src/geojson/multi_point.cpp index df4fdd7df..f3acdb1ea 100644 --- a/platform/android/src/geojson/multi_point.cpp +++ b/platform/android/src/geojson/multi_point.cpp @@ -2,6 +2,8 @@ #include "line_string.hpp" +#include "util.hpp" + namespace mbgl { namespace android { namespace geojson { @@ -11,7 +13,7 @@ mapbox::geojson::multi_point MultiPoint::convert(jni::JNIEnv &env, jni::Object(LineString::convert(env, jPositionListsList)); jni::DeleteLocalRef(env, jPositionListsList); } diff --git a/platform/android/src/geojson/polygon.cpp b/platform/android/src/geojson/polygon.cpp index bb37b8d99..ef00f9df3 100644 --- a/platform/android/src/geojson/polygon.cpp +++ b/platform/android/src/geojson/polygon.cpp @@ -2,6 +2,8 @@ #include "multi_line_string.hpp" +#include "util.hpp" + namespace mbgl { namespace android { namespace geojson { @@ -24,7 +26,9 @@ mapbox::geojson::polygon Polygon::convert(jni::JNIEnv &env, jni::Object(std::move(line))); + } } return polygon; diff --git a/platform/android/src/geojson/util.hpp b/platform/android/src/geojson/util.hpp new file mode 100644 index 000000000..ece8e5243 --- /dev/null +++ b/platform/android/src/geojson/util.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +namespace mbgl { +namespace android { +namespace geojson { + +// Clang 3.8 fails to implicitly convert matching types, so we'll have to do it explicitly. +template +To convertExplicit(From&& src) { + static_assert(std::is_same::container_type, + typename To::container_type>::value, + "container types do not match"); + static_assert(std::is_rvalue_reference::value, + "argument must be rvalue reference"); + return *reinterpret_cast>(&src); +} + +} // namespace geojson +} // namespace android +} // namespace mbgl