summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-11-29 15:54:40 +0100
committerKonstantin Käfer <mail@kkaefer.com>2017-11-29 17:31:33 +0100
commit8757164ac8f2b033b2b12d4baf075ed18cfeb2b4 (patch)
tree788aa097c9b079b2c0203be41ece33a49b0a753b /include
parent2eec5a19803a01e21d5793706ae69ac0d886cee5 (diff)
downloadqtlocation-mapboxgl-8757164ac8f2b033b2b12d4baf075ed18cfeb2b4.tar.gz
[build] standardize on -fvisibility=hidden for all targets
Enables -fvisibility=hidden for iOS and Linux, and adds a workaround for GCC 6.3-7.1 Adds a GCC 6 build Enables diagnostics for C files Fixes a shadow warning in parsedate.c
Diffstat (limited to 'include')
-rw-r--r--include/mbgl/style/conversion.hpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/include/mbgl/style/conversion.hpp b/include/mbgl/style/conversion.hpp
index 0b7e0b2b2f..71c2cec237 100644
--- a/include/mbgl/style/conversion.hpp
+++ b/include/mbgl/style/conversion.hpp
@@ -222,6 +222,15 @@ private:
optional<GeoJSON> (*toGeoJSON) (const Storage&, Error&);
};
+ // Extracted this function from the table below to work around a GCC bug with differing
+ // visibility settings for capturing lambdas: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80947
+ template <typename T>
+ static auto vtableEachMember(const Storage& s, const std::function<optional<Error>(const std::string&, const Convertible&)>& fn) {
+ return ConversionTraits<T>::eachMember(reinterpret_cast<const T&>(s), [&](const std::string& k, T&& v) {
+ return fn(k, Convertible(std::move(v)));
+ });
+ }
+
template <typename T>
static VTable* vtableForType() {
using Traits = ConversionTraits<T>;
@@ -257,11 +266,7 @@ private:
return optional<Convertible>();
}
},
- [] (const Storage& s, const std::function<optional<Error> (const std::string&, const Convertible&)>& fn) {
- return Traits::eachMember(reinterpret_cast<const T&>(s), [&](const std::string& k, T&& v) {
- return fn(k, Convertible(std::move(v)));
- });
- },
+ vtableEachMember<T>,
[] (const Storage& s) {
return Traits::toBool(reinterpret_cast<const T&>(s));
},