--- /dev/null
+From b79d478c21ed6af20554ead97da72de845dc3206 Mon Sep 17 00:00:00 2001
+From: Peter Korsgaard <peter@korsgaard.com>
+Date: Sat, 25 Feb 2017 21:57:19 +0100
+Subject: [PATCH] Fix build with gcc 6
+
+Gcc 6.x defaults to C++14, and the iostream operator bool behaviour changed
+in C++11. In previous versions, a somewhat odd operator void* was used to
+return the status of the stream as a pointer. Since C++11 a more sensible
+operator bool is used to return the stream staus.
+
+For details, see:
+
+http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool
+
+The code in CConfigReadContext assumes the pre-C++11 behaviour and provides
+its own operator void overload to return the status of the embedded
+iostream. With C++11, iostream no longer provides this overload, breaking
+the build:
+
+CConfig.cpp: In member function 'CConfigReadContext::operator void*() const':
+CConfig.cpp:1851:9: error: cannot convert 'std::istream {aka std::basic_istream<char>}' to 'void*' in return
+ return m_stream;
+
+To fix it, backport part of upstream commit 3d963bfbe7897d0a33ad (possible
+fix for mavericks) which changes the code to simply provide a getStream()
+method which returns a reference to the embedded stream and the calling code
+is changed to use operator bool on the returned stream, making the code
+compatible with both old and new compilers.
+
+This upstream commit is part of the 1.6.0 release, so can be dropped when
+the version is bumped.
+
+Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
+---
+ lib/server/CConfig.cpp | 7 +------
+ lib/server/CConfig.h | 2 +-
+ 2 files changed, 2 insertions(+), 7 deletions(-)
+
+diff --git a/lib/server/CConfig.cpp b/lib/server/CConfig.cpp
+index a502fe78..d67dde20 100644
+--- a/lib/server/CConfig.cpp
++++ b/lib/server/CConfig.cpp
+@@ -607,7 +607,7 @@ void
+ CConfig::read(CConfigReadContext& context)
+ {
+ CConfig tmp;
+- while (context) {
++ while (context.getStream()) {
+ tmp.readSection(context);
+ }
+ *this = tmp;
+@@ -1846,11 +1846,6 @@ CConfigReadContext::getLineNumber() const
+ return m_line;
+ }
+
+-CConfigReadContext::operator void*() const
+-{
+- return m_stream;
+-}
+-
+ bool
+ CConfigReadContext::operator!() const
+ {
+diff --git a/lib/server/CConfig.h b/lib/server/CConfig.h
+index c0d2faa8..0ee453cb 100644
+--- a/lib/server/CConfig.h
++++ b/lib/server/CConfig.h
+@@ -480,7 +480,6 @@ public:
+ bool readLine(CString&);
+ UInt32 getLineNumber() const;
+
+- operator void*() const;
+ bool operator!() const;
+
+ OptionValue parseBoolean(const CString&) const;
+@@ -502,6 +501,7 @@ public:
+ IPlatformScreen::CButtonInfo*
+ parseMouse(const CString& mouse) const;
+ KeyModifierMask parseModifier(const CString& modifiers) const;
++ std::istream& getStream() const { return m_stream; };
+
+ private:
+ // not implemented
+--
+2.11.0
+