From dfdb48659a6affe5edfd273f5f66ae0179639cc8 Mon Sep 17 00:00:00 2001
From: Sam Yates <halfflat@gmail.com>
Date: Thu, 7 Jul 2016 18:14:32 +0200
Subject: [PATCH] Address gcc 6.1 warnings

---
 src/point.hpp         | 2 +-
 src/util/optional.hpp | 9 ++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/point.hpp b/src/point.hpp
index faa9d154..920e452e 100644
--- a/src/point.hpp
+++ b/src/point.hpp
@@ -62,7 +62,7 @@ template <typename T>
 T
 norm(point<T> const& p)
 {
-    return sqrt(p.x*p.x + p.y*p.y + p.z*p.z);
+    return std::sqrt(p.x*p.x + p.y*p.y + p.z*p.z);
 }
 
 template <typename T>
diff --git a/src/util/optional.hpp b/src/util/optional.hpp
index ddf978d6..92191dff 100644
--- a/src/util/optional.hpp
+++ b/src/util/optional.hpp
@@ -226,6 +226,13 @@ namespace detail {
     template <typename T>
     using enable_unless_optional_t = enable_if_t<!is_optional<T>::value>;
 
+    // avoid nonnull address warnings when using operator| with e.g. char array constants
+    template <typename T>
+    bool decay_bool(const T* x) { return static_cast<bool>(x); }
+
+    template <typename T>
+    bool decay_bool(const T& x) { return static_cast<bool>(x); }
+
 } // namespace detail
 
 template <typename X>
@@ -398,7 +405,7 @@ typename std::enable_if<
     >
 >::type
 operator|(A&& a,B&& b) {
-    return a ? a : b;
+    return detail::decay_bool(a) ? a : b;
 }
 
 template <typename A,typename B>
-- 
GitLab