Bump boost to 1.59

1.59 upcoming release is needed for MSVC 14.0 (aka VS 2015) support.

There is a known breakage on MSVC with boost::none instance in
optional library.  Use not documented define as explained in this
issue upstream [1]: BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE.

[1] https://svn.boost.org/trac/boost/ticket/11203

Change-Id: I25b1797da93f7959d15a70105d67100e0e2c4b3b
Reviewed-on: https://gerrit.libreoffice.org/17056
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Tested-by: Jenkins <ci@libreoffice.org>
diff --git a/download.lst b/download.lst
index a285ba1..bc5a9f6 100644
--- a/download.lst
+++ b/download.lst
@@ -15,7 +15,7 @@ export APR_MD5SUM := eff9d741b0999a9bbab96862dd2a2a3d
export APR_TARBALL := apr-1.4.8.tar.gz
export APR_UTIL_MD5SUM := 71a11d037240b292f824ba1eb537b4e3
export APR_UTIL_TARBALL := apr-util-1.5.3.tar.gz
export BOOST_TARBALL := d6eef4b4cacb2183f2bf265a5a03a354-boost_1_55_0.tar.bz2
export BOOST_TARBALL := 9804305aae0c9de9f8cfc02e3de75167-boost_1_59_0_b1_rc1.tar.bz2
export BSH_TARBALL := ec1941a74d3ef513c4ce57a9092b74e1-bsh-2.0b5-src.zip
export BZIP2_TARBALL := 00b516f4704d4a7cb50a1d97e6e8e15b-bzip2-1.0.6.tar.gz
export CAIRO_TARBALL := f101a9e88b783337b20b2e26dfd26d5f-cairo-1.10.2.tar.gz
diff --git a/external/boost/UnpackedTarball_boost.mk b/external/boost/UnpackedTarball_boost.mk
index b0ffa9e..8e9d624 100644
--- a/external/boost/UnpackedTarball_boost.mk
+++ b/external/boost/UnpackedTarball_boost.mk
@@ -10,51 +10,25 @@
boost_patches :=
#https://svn.boost.org/trac/boost/ticket/3780
boost_patches += boost.3780.aliasing.patch
#https://svn.boost.org/trac/boost/ticket/9397
boost_patches += boost.9397.warnings.patch.0
#http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47679
boost_patches += boost.gcc47679.patch
#https://svn.boost.org/trac/boost/ticket/6369
boost_patches += boost.6369.warnings.patch
#https://svn.boost.org/trac/boost/ticket/7551
boost_patches += boost.7551.unusedvars.patch
#https://svn.boost.org/trac/boost/ticket/6142
boost_patches += boost.6142.warnings.patch.1

# fixed upstream
boost_patches += boost.bind.Wunused-local-typedefs.warnings.patch
# fixed upstream
boost_patches += boost.concept_check.C4100.warnings.patch
# fixed upstream
boost_patches += boost.concept_check.Wunused-local-typedefs.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9881
boost_patches += boost.crc.Wshadow.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9882
boost_patches += boost.date_time.Wshadow.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9883
boost_patches += boost.date_time.Wunused-local-typedefs.warnings.patch
# fixed upstream
boost_patches += boost.math.Wdeprecated-register.patch.0
# fixed upstream
boost_patches += boost.math.Wunused-local-typedefs.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9885
boost_patches += boost.multi_array.C4510.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9886
boost_patches += boost.multi_array.Wshadow.warnings.patch.2
# fixed upstream
boost_patches += boost.multi_array.Wundef.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9888
boost_patches += boost.multi_array.Wunused-local-typedefs.warnings.patch
# fixed upstream
boost_patches += boost.multi_index.Wshadow.warnings.patch.1
# https://svn.boost.org/trac/boost/ticket/9889
boost_patches += boost.predef.Wundef.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9891
boost_patches += boost.preprocessor.Wundef.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9892
boost_patches += boost.property_tree.Wshadow.warnings.patch.1
# https://svn.boost.org/trac/boost/ticket/9893
boost_patches += boost.property_tree.Wtype-limits.warnings.patch.1
# https://svn.boost.org/trac/boost/ticket/9894
boost_patches += boost.ptr_container.Wshadow.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9895
@@ -63,8 +37,6 @@ boost_patches += boost.ptr_container.Wignored-qualifiers.warnings.patch
boost_patches += boost.ptr_container.Wextra.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9897
boost_patches += boost.ptr_container.Wunused-parameter.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9898
boost_patches += boost.random.Wshadow.warnings.patch
# fixed upstream
boost_patches += boost.random.Wunused-local-typedefs.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9900
@@ -74,21 +46,8 @@ boost_patches += boost.spirit.Wunused-local-typedefs.warnings.patch
# to-do: submit upstream
boost_patches += boost.spirit.Wunused-parameter.warnings.patch
boost_patches += boost.date_time.Wshadow.warnings.patch.1
# fixed upstream
boost_patches += boost.unordered.Wshadow.warnings.patch
# fixed upstream
boost_patches += boost.tuple.Wunused-local-typedefs.warnings.patch
# https://svn.boost.org/trac/boost/ticket/9903
boost_patches += boost.utility.Wundef.warnings.patch
# fixed upstream
boost_patches += boost.uuid.Wshadow.warnings.patch

# https://svn.boost.org/trac/boost/ticket/9890
boost_patches += boost.endian.patch
# fixed upstream
boost_patches += boost.loplugin.patch
# fixed upstream
boost_patches += boost.transform_width.patch

# Help static analysis tools (see SAL_UNUSED_PARAMETER in sal/types.h):
ifeq (GCC,$(COM))
@@ -105,11 +64,36 @@ boost_patches += boost.wunused.patch
boost_patches += boost.wdeprecated-auto_ptr.patch.0
boost_patches += boost.signal2.Wshadow.warnings.patch
boost_patches += boost.boost_static_assert_unused_attribute.patch.0
boost_patches += w4702.patch.0

boost_patches += ubsan.patch.0
boost_patches += rtti.patch.0

# https://svn.boost.org/trac/boost/ticket/11505
boost_patches += boost_1_59_0.mpl.config.wundef.patch
# https://svn.boost.org/trac/boost/ticket/11503
boost_patches += boost_1_59_0.type_index.wshadow.patch
# https://svn.boost.org/trac/boost/ticket/11502
boost_patches += boost_1_59_0.property_tree.wtype-limits.patch
# https://svn.boost.org/trac/boost/ticket/11507
boost_patches += boost_1_59_0.property_tree.wshadow.patch
# https://svn.boost.org/trac/boost/ticket/11508
boost_patches += boost_1_59_0.iostreams.wshadow.patch
# https://svn.boost.org/trac/boost/ticket/11509
boost_patches += boost_1_59_0.iostreams.wunused.patch
# https://svn.boost.org/trac/boost/ticket/11506
boost_patches += boost_1_59_0.rational.wshadow.patch
# https://svn.boost.org/trac/boost/ticket/11510
boost_patches += boost_1_59_0.unique_ptr.wshadow.patch
# fixed upstream
# https://svn.boost.org/trac/boost/ticket/11500
boost_patches += boost_1_59_0.move.Bool-type-collision.4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.patch
# https://svn.boost.org/trac/boost/ticket/11511
boost_patches += boost_1_59_0.multi_array.wshadow.patch
# https://svn.boost.org/trac/boost/ticket/11512
boost_patches += boost_1_59_0.signal2.wshadow.patch
# https://svn.boost.org/trac/boost/ticket/11501
boost_patches += boost_1_59_0.property_tree.wreturn-type.patch

$(eval $(call gb_UnpackedTarball_UnpackedTarball,boost))

$(eval $(call gb_UnpackedTarball_set_tarball,boost,$(BOOST_TARBALL)))
diff --git a/external/boost/boost.7551.unusedvars.patch b/external/boost/boost.7551.unusedvars.patch
deleted file mode 100644
index a80d4a1..0000000
--- a/external/boost/boost.7551.unusedvars.patch
+++ /dev/null
@@ -1,10 +0,0 @@
--- misc/boost_1_44_0/boost/date_time/tz_db_base.hpp
+++ misc/build/boost_1_44_0/boost/date_time/tz_db_base.hpp
@@ -170,7 +170,6 @@
       /*! May throw data_not_accessible, or bad_field_count exceptions */
       void load_from_file(const std::string& pathspec)
       {
-        string_type in_str;
         std::string  buff;
         
         std::ifstream ifs(pathspec.c_str());
diff --git a/external/boost/boost.9397.warnings.patch.0 b/external/boost/boost.9397.warnings.patch.0
deleted file mode 100644
index 429d707..0000000
--- a/external/boost/boost.9397.warnings.patch.0
+++ /dev/null
@@ -1,91 +0,0 @@
Index: boost/predef/os/bsd/bsdi.h
===================================================================
--- boost/predef/os/bsd/bsdi.h	(revision 86709)
+++ boost/predef/os/bsd/bsdi.h	(working copy)
@@ -24,7 +24,7 @@
 
 #define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_NOT_AVAILABLE
 
-#if !BOOST_PREDEF_DETAIL_OS_DETECTED && ( \
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && (  \
     defined(__bsdi__) \
     )
 #   ifndef BOOST_OS_BSD_AVAILABLE
Index: boost/predef/os/bsd/dragonfly.h
===================================================================
--- boost/predef/os/bsd/dragonfly.h	(revision 86709)
+++ boost/predef/os/bsd/dragonfly.h	(working copy)
@@ -24,7 +24,7 @@
 
 #define BOOST_OS_BSD_DRAGONFLY BOOST_VERSION_NUMBER_NOT_AVAILABLE
 
-#if !BOOST_PREDEF_DETAIL_OS_DETECTED && ( \
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && (  \
     defined(__DragonFly__) \
     )
 #   ifndef BOOST_OS_BSD_AVAILABLE
Index: boost/predef/os/bsd/free.h
===================================================================
--- boost/predef/os/bsd/free.h	(revision 86709)
+++ boost/predef/os/bsd/free.h	(working copy)
@@ -26,7 +26,7 @@
 
 #define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_NOT_AVAILABLE
 
-#if !BOOST_PREDEF_DETAIL_OS_DETECTED && ( \
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && (  \
     defined(__FreeBSD__) \
     )
 #   ifndef BOOST_OS_BSD_AVAILABLE
Index: boost/predef/os/bsd/net.h
===================================================================
--- boost/predef/os/bsd/net.h	(revision 86709)
+++ boost/predef/os/bsd/net.h	(working copy)
@@ -31,7 +31,7 @@
 
 #define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_NOT_AVAILABLE
 
-#if !BOOST_PREDEF_DETAIL_OS_DETECTED && ( \
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && (  \
     defined(__NETBSD__) || defined(__NetBSD__) \
     )
 #   ifndef BOOST_OS_BSD_AVAILABLE
Index: boost/predef/os/bsd/open.h
===================================================================
--- boost/predef/os/bsd/open.h	(revision 86709)
+++ boost/predef/os/bsd/open.h	(working copy)
@@ -55,7 +55,7 @@
 
 #define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_NOT_AVAILABLE
 
-#if !BOOST_PREDEF_DETAIL_OS_DETECTED && ( \
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && (  \
     defined(__OpenBSD__) \
     )
 #   ifndef BOOST_OS_BSD_AVAILABLE
Index: boost/predef/os/bsd.h
===================================================================
--- boost/predef/os/bsd.h	(revision 86709)
+++ boost/predef/os/bsd.h	(working copy)
@@ -59,7 +59,7 @@
 #define BOOST_OS_BSD BOOST_VERSION_NUMBER_NOT_AVAILABLE
 #endif
 
-#if !BOOST_PREDEF_DETAIL_OS_DETECTED && ( \
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && (  \
     defined(BSD) || \
     defined(_SYSTYPE_BSD) \
     )
Index: boost/predef/os/macos.h
===================================================================
--- boost/predef/os/macos.h	(revision 86709)
+++ boost/predef/os/macos.h	(working copy)
@@ -31,7 +31,7 @@
 
 #define BOOST_OS_MACOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
 
-#if !BOOST_PREDEF_DETAIL_OS_DETECTED && ( \
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && (  \
     defined(macintosh) || defined(Macintosh) || \
     (defined(__APPLE__) && defined(__MACH__)) \
     )
diff --git a/external/boost/boost.auto_link.patch b/external/boost/boost.auto_link.patch
index 556d14e..ed60dec 100644
--- a/external/boost/boost.auto_link.patch
+++ b/external/boost/boost.auto_link.patch
@@ -1,6 +1,7 @@
--- foo/foo/foo/boost/config/auto_link.hpp
+++ foo/foo/foo/boost/config/auto_link.hpp
@@ -357,37 +357,6 @@
diff -ru boost.orig/boost/config/auto_link.hpp boost/boost/config/auto_link.hpp
--- foo/misc/boost.orig/boost/config/auto_link.hpp	2015-05-07 19:11:52.000000000 +0200
+++ foo/misc/boost/boost/config/auto_link.hpp	2015-07-18 22:34:14.371946475 +0200
@@ -367,42 +367,6 @@
 #  define BOOST_LIB_PREFIX "lib"
 #endif
 
@@ -24,6 +25,11 @@
-#  ifdef BOOST_LIB_DIAGNOSTIC
-#     pragma message ("Linking to lib file: " BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib")
-#  endif
-#elif defined(BOOST_LIB_BUILDID)
-#  pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) ".lib")
-#  ifdef BOOST_LIB_DIAGNOSTIC
-#     pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) ".lib")
-#  endif
-#else
-#  pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib")
-#  ifdef BOOST_LIB_DIAGNOSTIC
diff --git a/external/boost/boost.bind.Wunused-local-typedefs.warnings.patch b/external/boost/boost.bind.Wunused-local-typedefs.warnings.patch
deleted file mode 100644
index 0f8c573..0000000
--- a/external/boost/boost.bind.Wunused-local-typedefs.warnings.patch
+++ /dev/null
@@ -1,11 +0,0 @@
--- misc/boost_1_44_0/boost/bind/arg.hpp
+++ misc/build/boost_1_44_0/boost/bind/arg.hpp
@@ -35,6 +35,8 @@
     {
         // static assert I == is_placeholder<T>::value
         typedef char T_must_be_placeholder[ I == is_placeholder<T>::value? 1: -1 ];
+        T_must_be_placeholder dummy; (void) dummy;
+            // silence -Werror=unused-local-typedefs (GCC 4.8)
     }
 };
 
diff --git a/external/boost/boost.concept_check.C4100.warnings.patch b/external/boost/boost.concept_check.C4100.warnings.patch
deleted file mode 100644
index ea47577..0000000
--- a/external/boost/boost.concept_check.C4100.warnings.patch
+++ /dev/null
@@ -1,19 +0,0 @@
--- misc/boost_1_44_0/boost/concept/detail/msvc.hpp
+++ misc/build/boost_1_44_0/boost/concept/detail/msvc.hpp
@@ -12,6 +12,9 @@
 #  include <boost/mpl/if.hpp>
 # endif
 
+// disable spurious "unreferenced formal parameter" warnings
+#pragma warning( push )
+#pragma warning( disable: 4100 )
 
 namespace boost { namespace concepts {
 
@@ -111,4 +114,6 @@
 # endif
 }}
 
+#pragma warning( pop )
+
 #endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
diff --git a/external/boost/boost.concept_check.Wunused-local-typedefs.warnings.patch b/external/boost/boost.concept_check.Wunused-local-typedefs.warnings.patch
deleted file mode 100644
index 3096794..0000000
--- a/external/boost/boost.concept_check.Wunused-local-typedefs.warnings.patch
+++ /dev/null
@@ -1,13 +0,0 @@
--- misc/boost_1_44_0/boost/concept/detail/general.hpp
+++ misc/build/boost_1_44_0/boost/concept/detail/general.hpp
@@ -68,7 +68,9 @@
 #  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )             \
     typedef ::boost::concepts::detail::instantiate<          \
     &::boost::concepts::requirement_<ModelFnPtr>::failed>    \
-      BOOST_PP_CAT(boost_concept_check,__LINE__)
+      BOOST_PP_CAT(boost_concept_check,__LINE__); \
+    void BOOST_PP_CAT(boost_concept_check_dummy,__LINE__)(BOOST_PP_CAT(boost_concept_check,__LINE__) *)
+        // silence -Werror=unused-local-typedefs (GCC 4.8)
 
 }}
 
diff --git a/external/boost/boost.date_time.Wunused-local-typedefs.warnings.patch b/external/boost/boost.date_time.Wunused-local-typedefs.warnings.patch
deleted file mode 100644
index 5d28f66..0000000
--- a/external/boost/boost.date_time.Wunused-local-typedefs.warnings.patch
+++ /dev/null
@@ -1,101 +0,0 @@
--- a/b/boost/boost/date_time/gregorian/greg_facet.hpp	2013-05-31 14:03:30.476695310 +0200
+++ a/b/boost/boost/date_time/gregorian/greg_facet.hpp	2013-05-31 14:03:22.894669713 +0200
@@ -215,7 +215,6 @@
   {
     std::istream_iterator<std::basic_string<charT>, charT> beg(is), eos;
     
-    typedef boost::date_time::all_date_names_put<greg_facet_config, charT> facet_def;
     d = from_stream(beg, eos);
     return is;
   }
--- misc/boost_1_44_0/boost/date_time/date_parsing.hpp
+++ misc/build/boost_1_44_0/boost/date_time/date_parsing.hpp
@@ -113,7 +113,6 @@
         spec_str = "mdy";
       }
 
-      typedef typename date_type::year_type year_type;
       typedef typename date_type::month_type month_type;
       unsigned pos = 0;
       unsigned short year(0), month(0), day(0);
@@ -159,7 +158,7 @@
     parse_undelimited_date(const std::string& s) {
       int offsets[] = {4,2,2};
       int pos = 0;
-      typedef typename date_type::year_type year_type;
+      //typedef typename date_type::year_type year_type;
       //typename date_type::ymd_type ymd((year_type::min)(),1,1);
       unsigned short y = 0, m = 0, d = 0;
 
--- misc/boost_1_44_0/boost/date_time/local_time/local_time_io.hpp
+++ misc/build/boost_1_44_0/boost/date_time/local_time/local_time_io.hpp
@@ -36,7 +36,6 @@
     boost::io::ios_flags_saver iflags(os);
     typedef local_date_time time_type;//::utc_time_type typename 
     typedef date_time::time_facet<time_type, CharT> custom_time_facet;
-    typedef std::time_put<CharT> std_time_facet;
     std::ostreambuf_iterator<CharT> oitr(os);
 
     if(std::has_facet<custom_time_facet>(os.getloc())) {
@@ -123,7 +122,6 @@
              const boost::local_time::local_time_period& p) {
     boost::io::ios_flags_saver iflags(os);
     typedef boost::date_time::time_facet<local_date_time, CharT> custom_facet;
-    typedef std::time_put<CharT> std_time_facet;
     std::ostreambuf_iterator<CharT> oitr(os);
     if (std::has_facet<custom_facet>(os.getloc())) {
       std::use_facet<custom_facet>(os.getloc()).put(oitr, os, os.fill(), p);
--- misc/boost_1_44_0/boost/date_time/posix_time/posix_time_io.hpp
+++ misc/build/boost_1_44_0/boost/date_time/posix_time/posix_time_io.hpp
@@ -47,7 +47,6 @@
              const ptime& p) {
     boost::io::ios_flags_saver iflags(os);
     typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
-    typedef std::time_put<CharT>                  std_ptime_facet;
     std::ostreambuf_iterator<CharT> oitr(os);
     if (std::has_facet<custom_ptime_facet>(os.getloc()))
       std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), p);
@@ -114,7 +113,6 @@
              const boost::posix_time::time_period& p) {
     boost::io::ios_flags_saver iflags(os);
     typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
-    typedef std::time_put<CharT>                  std_time_facet;
     std::ostreambuf_iterator<CharT> oitr(os);
     if (std::has_facet<custom_ptime_facet>(os.getloc())) {
       std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), p);
@@ -180,7 +178,6 @@
   {
     boost::io::ios_flags_saver iflags(os);
     typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
-    typedef std::time_put<CharT>                  std_ptime_facet;
     std::ostreambuf_iterator<CharT> oitr(os);
     if (std::has_facet<custom_ptime_facet>(os.getloc()))
       std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), td);
--- misc/boost_1_44_0/boost/date_time/string_convert.hpp
+++ misc/build/boost_1_44_0/boost/date_time/string_convert.hpp
@@ -21,7 +21,6 @@
   inline
   std::basic_string<OutputT> convert_string_type(const std::basic_string<InputT>& inp_str)
   {
-    typedef std::basic_string<InputT> input_type;
     typedef std::basic_string<OutputT> output_type;
     output_type result;
     result.insert(result.begin(), inp_str.begin(), inp_str.end());
--- misc/boost_1_44_0/boost/date_time/strings_from_facet.hpp
+++ misc/build/boost_1_44_0/boost/date_time/strings_from_facet.hpp
@@ -35,7 +35,6 @@
 {
   typedef std::basic_string<charT> string_type;
   typedef std::vector<string_type> collection_type;
-  typedef std::basic_ostringstream<charT> ostream_type;
   typedef std::ostreambuf_iterator<charT> ostream_iter_type;
   typedef std::basic_ostringstream<charT> stringstream_type;
   typedef std::time_put<charT>           time_put_facet_type;
@@ -85,7 +84,6 @@
 {
   typedef std::basic_string<charT> string_type;
   typedef std::vector<string_type> collection_type;
-  typedef std::basic_ostringstream<charT> ostream_type;
   typedef std::ostreambuf_iterator<charT> ostream_iter_type;
   typedef std::basic_ostringstream<charT> stringstream_type;
   typedef std::time_put<charT>           time_put_facet_type;
diff --git a/external/boost/boost.endian.patch b/external/boost/boost.endian.patch
deleted file mode 100644
index 0982090..0000000
--- a/external/boost/boost.endian.patch
+++ /dev/null
@@ -1,11 +0,0 @@
--- foo/foo/foo/boost/predef/other/endian.h
+++ foo/foo/foo/boost/predef/other/endian.h
@@ -53,7 +53,7 @@
  */
 #if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
     !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
-#   if BOOST_LIB_C_GNU
+#   if BOOST_LIB_C_GNU || defined(__ANDROID__)
 #       include <endian.h>
 #   else
 #       if BOOST_OS_MACOS
diff --git a/external/boost/boost.gcc47679.patch b/external/boost/boost.gcc47679.patch
index e62a874..06cbd0f 100644
--- a/external/boost/boost.gcc47679.patch
+++ b/external/boost/boost.gcc47679.patch
@@ -1,24 +1,34 @@
--- misc/boost_1_44_0/boost/utility/compare_pointees.hpp	2011-02-10 16:39:05.960176555 +0000
+++ misc/build/boost_1_44_0/boost/utility/compare_pointees.hpp	2011-02-10 16:40:59.091423279 +0000
@@ -29,7 +29,11 @@
 inline
 bool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y )
 {
-  return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;
+  if (!x && !y)
+    return true;
+  if (!x || !y)
+    return false;
+  return (*x) == (*y);
 }
diff -ru boost.orig/boost/optional/optional.hpp boost/boost/optional/optional.hpp
--- foo/misc/boost.orig/boost/optional/optional.hpp	2015-07-18 11:27:36.168127029 +0200
+++ foo/misc/boost/boost/optional/optional.hpp	2015-07-18 20:36:13.777997833 +0200
@@ -53,6 +53,8 @@
 
 template<class OptionalPointee>
--- misc/boost_1_44_0/boost/spirit/home/classic/core/primitives/impl/numerics.ipp	2011-03-02 12:22:47.222870106 +0000
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/primitives/impl/numerics.ipp	2011-03-02 12:22:47.222870106 +0000
@@ -219,6 +219,20 @@
 #include <boost/optional/optional_fwd.hpp>
 
+#include <string.h>
+
 #if (defined BOOST_NO_CXX11_RVALUE_REFERENCES) || (defined BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCES)
 #define BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
 #endif
@@ -134,6 +136,11 @@
 
   public:
 
+    aligned_storage()
+    {
+      memset(&dummy_, 0, sizeof(dummy_));
+    }
+
 #if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
     void const* address() const { return &dummy_; }
     void      * address()       { return &dummy_; }
diff -ru boost.orig/boost/spirit/home/classic/core/primitives/impl/numerics.ipp boost/boost/spirit/home/classic/core/primitives/impl/numerics.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/primitives/impl/numerics.ipp	2015-07-18 11:27:36.169127029 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/primitives/impl/numerics.ipp	2015-07-18 20:34:32.110998976 +0200
@@ -218,6 +218,19 @@
                 }
             }
         };
 
+        template <int Radix>
+        struct negative_accumulate<unsigned char, Radix>
+        {
@@ -32,30 +42,22 @@
+                return true;
+            }
+        };
+
 
         template <int MaxDigits>
         inline bool allow_more_digits(std::size_t i)
         {
--- misc/boost_1_44_0/boost/optional/optional.hpp	2011-04-05 13:19:01.223587256 +0100
+++ misc/build/boost_1_44_0/boost/optional/optional.hpp	2011-04-05 13:19:01.223587256 +0100
@@ -31,6 +31,8 @@
diff -ru boost.orig/boost/utility/compare_pointees.hpp boost/boost/utility/compare_pointees.hpp
--- foo/misc/boost.orig/boost/utility/compare_pointees.hpp	2015-02-27 07:26:11.000000000 +0100
+++ foo/misc/boost/boost/utility/compare_pointees.hpp	2015-07-18 20:20:41.388988458 +0200
@@ -29,7 +29,11 @@
 inline
 bool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y )
 {
-  return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;
+  if (!x && !y)
+    return true;
+  if (!x || !y)
+    return false;
+  return (*x) == (*y);
 }
 
 #include <boost/optional/optional_fwd.hpp>
 
+#include <string.h>
+
 #if BOOST_WORKAROUND(BOOST_MSVC, == 1200)
 // VC6.0 has the following bug:
 //   When a templated assignment operator exist, an implicit conversion
@@ -114,6 +116,11 @@
 
   public:
 
+    aligned_storage()
+    {
+      memset(&dummy_, 0, sizeof(dummy_));
+    }
+
 #if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
     void const* address() const { return &dummy_; }
     void      * address()       { return &dummy_; }
 template<class OptionalPointee>
diff --git a/external/boost/boost.loplugin.patch b/external/boost/boost.loplugin.patch
deleted file mode 100644
index 7c35d33..0000000
--- a/external/boost/boost.loplugin.patch
+++ /dev/null
@@ -1,19 +0,0 @@
--- foo/foo/foo/boost/lexical_cast.hpp
+++ foo/foo/foo/boost/lexical_cast.hpp
@@ -1016,7 +1016,7 @@
                 if( !has_minus ) value = std::numeric_limits<T>::quiet_NaN();
                 else value = (boost::math::changesign) (std::numeric_limits<T>::quiet_NaN());
                 return true;
-            } else
+            } else {
             if (( /* 'INF' or 'inf' */
                   end-begin==3
                   &&
@@ -1031,6 +1031,7 @@
                 else value = (boost::math::changesign) (std::numeric_limits<T>::infinity());
                 return true;
             }
+            }
 
             return false;
         }
diff --git a/external/boost/boost.math.Wdeprecated-register.patch.0 b/external/boost/boost.math.Wdeprecated-register.patch.0
deleted file mode 100644
index d11de3a..0000000
--- a/external/boost/boost.math.Wdeprecated-register.patch.0
+++ /dev/null
@@ -1,36 +0,0 @@
--- boost/math/special_functions/detail/lanczos_sse2.hpp
+++ boost/math/special_functions/detail/lanczos_sse2.hpp
@@ -51,11 +51,11 @@
       static_cast<double>(23531376880.41075968857200767445163675473L),
       static_cast<double>(0u)
    };
-   register __m128d vx = _mm_load1_pd(&x);
-   register __m128d sum_even = _mm_load_pd(coeff);
-   register __m128d sum_odd = _mm_load_pd(coeff+2);
-   register __m128d nc_odd, nc_even;
-   register __m128d vx2 = _mm_mul_pd(vx, vx);
+   __m128d vx = _mm_load1_pd(&x);
+   __m128d sum_even = _mm_load_pd(coeff);
+   __m128d sum_odd = _mm_load_pd(coeff+2);
+   __m128d nc_odd, nc_even;
+   __m128d vx2 = _mm_mul_pd(vx, vx);
 
    sum_even = _mm_mul_pd(sum_even, vx2);
    nc_even = _mm_load_pd(coeff + 4);
@@ -136,11 +136,11 @@
          static_cast<double>(56906521.91347156388090791033559122686859L),
          static_cast<double>(0u)
    };
-   register __m128d vx = _mm_load1_pd(&x);
-   register __m128d sum_even = _mm_load_pd(coeff);
-   register __m128d sum_odd = _mm_load_pd(coeff+2);
-   register __m128d nc_odd, nc_even;
-   register __m128d vx2 = _mm_mul_pd(vx, vx);
+   __m128d vx = _mm_load1_pd(&x);
+   __m128d sum_even = _mm_load_pd(coeff);
+   __m128d sum_odd = _mm_load_pd(coeff+2);
+   __m128d nc_odd, nc_even;
+   __m128d vx2 = _mm_mul_pd(vx, vx);
 
    sum_even = _mm_mul_pd(sum_even, vx2);
    nc_even = _mm_load_pd(coeff + 4);
diff --git a/external/boost/boost.math.Wunused-local-typedefs.warnings.patch b/external/boost/boost.math.Wunused-local-typedefs.warnings.patch
deleted file mode 100644
index e74c149f..0000000
--- a/external/boost/boost.math.Wunused-local-typedefs.warnings.patch
+++ /dev/null
@@ -1,34 +0,0 @@
--- a/b/boost/boost/math/special_functions/fpclassify.hpp	2013-05-31 14:02:13.660436127 +0200
+++ a/b/boost/boost/math/special_functions/fpclassify.hpp	2013-05-31 14:01:17.372246240 +0200
@@ -339,7 +338,6 @@
 { //!< \brief return true if floating-point type t is finite.
    typedef detail::fp_traits<long double>::type traits;
    typedef traits::method method;
-   typedef boost::is_floating_point<long double>::type fp_tag;
    typedef long double value_type;
    return detail::isfinite_impl(static_cast<value_type>(x), method());
 }
@@ -410,7 +407,6 @@
 {
    typedef detail::fp_traits<long double>::type traits;
    typedef traits::method method;
-   typedef boost::is_floating_point<long double>::type fp_tag;
    typedef long double value_type;
    return detail::isnormal_impl(static_cast<value_type>(x), method());
 }
@@ -499,7 +494,6 @@
 {
    typedef detail::fp_traits<long double>::type traits;
    typedef traits::method method;
-   typedef boost::is_floating_point<long double>::type fp_tag;
    typedef long double value_type;
    return detail::isinf_impl(static_cast<value_type>(x), method());
 }
@@ -585,7 +578,6 @@
 { //!< \brief return true if floating-point type t is NaN (Not A Number).
    typedef detail::fp_traits<long double>::type traits;
    typedef traits::method method;
-   typedef boost::is_floating_point<long double>::type fp_tag;
    return detail::isnan_impl(x, method());
 }
 #endif
diff --git a/external/boost/boost.multi_array.C4510.warnings.patch b/external/boost/boost.multi_array.C4510.warnings.patch
index 11fdace..d450ace 100644
--- a/external/boost/boost.multi_array.C4510.warnings.patch
+++ b/external/boost/boost.multi_array.C4510.warnings.patch
@@ -1,6 +1,7 @@
--- misc/boost_1_44_0/boost/multi_array/concept_checks.hpp
+++ misc/build/boost_1_44_0/boost/multi_array/concept_checks.hpp
@@ -56,6 +56,13 @@
diff -ru boost.orig/boost/multi_array/concept_checks.hpp boost/boost/multi_array/concept_checks.hpp
--- foo/misc/boost.orig/boost/multi_array/concept_checks.hpp	2014-04-23 17:36:51.000000000 +0200
+++ foo/misc/boost/boost/multi_array/concept_checks.hpp	2015-07-18 20:58:17.222982959 +0200
@@ -58,6 +58,13 @@
 
 } // namespace detail
 
@@ -14,7 +15,7 @@
 
   template <typename Array, std::size_t NumDims >
   struct ConstMultiArrayConcept
@@ -117,6 +124,9 @@
@@ -119,6 +126,9 @@
     index_range range;
   };
 
diff --git a/external/boost/boost.multi_array.Wshadow.warnings.patch.2 b/external/boost/boost.multi_array.Wshadow.warnings.patch.2
deleted file mode 100644
index 1f8f0b5..0000000
--- a/external/boost/boost.multi_array.Wshadow.warnings.patch.2
+++ /dev/null
@@ -1,46 +0,0 @@
From d28b2bc733d85b0bb194f395375f2a460b9be00d Mon Sep 17 00:00:00 2001
From: Michael Stahl <mstahl@redhat.com>
Date: Wed, 30 Apr 2014 12:27:55 +0200
Subject: [PATCH] multi_array: suppress GCC -Wshadow warnings (fixes: #9886)

---
 include/boost/multi_array.hpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/include/boost/multi_array.hpp b/include/boost/multi_array.hpp
index 8193699..72b2294 100644
--- a/include/boost/multi_array.hpp
+++ b/include/boost/multi_array.hpp
@@ -18,6 +18,16 @@
 // declaration and definition
 //
 
+#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 406)
+#  pragma GCC diagnostic push
+#  pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#if defined(__clang__)
+#  pragma clang diagnostic push
+#  pragma clang diagnostic ignored "-Wshadow"
+#endif
+
 #include "boost/multi_array/base.hpp"
 #include "boost/multi_array/collection_concept.hpp"
 #include "boost/multi_array/copy_array.hpp"
@@ -496,4 +501,12 @@ private:
 
 } // namespace boost
 
+#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 406)
+#  pragma GCC diagnostic pop
+#endif
+
+#if defined(__clang__)
+#  pragma clang diagnostic pop
+#endif
+
 #endif // BOOST_MULTI_ARRAY_RG071801_HPP
-- 
1.8.3.1

diff --git a/external/boost/boost.multi_array.Wundef.warnings.patch b/external/boost/boost.multi_array.Wundef.warnings.patch
deleted file mode 100644
index e17c734..0000000
--- a/external/boost/boost.multi_array.Wundef.warnings.patch
+++ /dev/null
@@ -1,11 +0,0 @@
--- foo/foo/foo/boost/multi_array/base.hpp
+++ foo/foo/foo/boost/multi_array/base.hpp
@@ -65,7 +65,7 @@
 // object creation in small-memory environments.  Thus, the objects
 // can be left undefined by defining BOOST_MULTI_ARRAY_NO_GENERATORS 
 // before loading multi_array.hpp.
-#if !BOOST_MULTI_ARRAY_NO_GENERATORS
+#if !defined(BOOST_MULTI_ARRAY_NO_GENERATORS) || !BOOST_MULTI_ARRAY_NO_GENERATORS
 namespace {
   multi_array_types::extent_gen extents;
   multi_array_types::index_gen indices;
diff --git a/external/boost/boost.multi_array.Wunused-local-typedefs.warnings.patch b/external/boost/boost.multi_array.Wunused-local-typedefs.warnings.patch
index b0be548..3edcfcc 100644
--- a/external/boost/boost.multi_array.Wunused-local-typedefs.warnings.patch
+++ b/external/boost/boost.multi_array.Wunused-local-typedefs.warnings.patch
@@ -1,5 +1,6 @@
--- misc/boost_1_44_0/boost/multi_array/concept_checks.hpp
+++ misc/build/boost_1_44_0/boost/multi_array/concept_checks.hpp
diff -ru boost.orig/boost/multi_array/concept_checks.hpp boost/boost/multi_array/concept_checks.hpp
--- foo/misc/boost.orig/boost/multi_array/concept_checks.hpp	2015-07-18 21:20:26.353996242 +0200
+++ foo/misc/boost/boost/multi_array/concept_checks.hpp	2015-07-18 21:21:05.202995805 +0200
@@ -39,8 +39,6 @@
 
     template <typename Array, typename IdxGen, typename Call_Type>
diff --git a/external/boost/boost.multi_index.Wshadow.warnings.patch.1 b/external/boost/boost.multi_index.Wshadow.warnings.patch.1
deleted file mode 100644
index 58c39c0..0000000
--- a/external/boost/boost.multi_index.Wshadow.warnings.patch.1
+++ /dev/null
@@ -1,94 +0,0 @@
--- boost/boost/multi_index/sequenced_index.hpp	2008-07-03 18:51:53.000000000 +0200
+++ boost/boost/multi_index/sequenced_index.hpp	2013-05-17 15:44:15.265289335 +0200
@@ -346,7 +346,7 @@
   }
 
   template<typename Modifier,typename Rollback>
-  bool modify(iterator position,Modifier mod,Rollback back)
+  bool modify(iterator position,Modifier mod,Rollback back_)
   {
     BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
     BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -363,7 +363,7 @@
 #endif
 
     return this->final_modify_(
-      mod,back,static_cast<final_node_type*>(position.get_node()));
+      mod,back_,static_cast<final_node_type*>(position.get_node()));
   }
 
   void swap(sequenced_index<SuperMeta,TagList>& x)
--- boost/boost/multi_index_container.hpp	2010-07-24 11:20:29.000000000 +0200
+++ boost/boost/multi_index_container.hpp	2013-05-17 15:45:56.723899853 +0200
@@ -360,7 +360,7 @@
     IteratorType it
     BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
   {
-    typedef typename nth_index<N>::type index;
+    typedef typename nth_index<N>::type index_;
 
 #if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
     BOOST_STATIC_ASSERT(
@@ -371,7 +371,7 @@
     BOOST_MULTI_INDEX_CHECK_IS_OWNER(
       it,static_cast<typename IteratorType::container_type&>(*this));
 
-    return index::make_iterator(static_cast<node_type*>(it.get_node()));
+    return index_::make_iterator(static_cast<node_type*>(it.get_node()));
   }
 
   template<int N,typename IteratorType>
@@ -379,7 +379,7 @@
     IteratorType it
     BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))const
   {
-    typedef typename nth_index<N>::type index;
+    typedef typename nth_index<N>::type index_;
 
 #if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
     BOOST_STATIC_ASSERT((
@@ -390,7 +390,7 @@
     BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
     BOOST_MULTI_INDEX_CHECK_IS_OWNER(
       it,static_cast<const typename IteratorType::container_type&>(*this));
-    return index::make_iterator(static_cast<node_type*>(it.get_node()));
+    return index_::make_iterator(static_cast<node_type*>(it.get_node()));
   }
 #endif
 
@@ -414,7 +414,7 @@
     IteratorType it
     BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
   {
-    typedef typename index<Tag>::type index;
+    typedef typename index<Tag>::type index_;
 
 #if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
     BOOST_STATIC_ASSERT(
@@ -424,7 +424,7 @@
     BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
     BOOST_MULTI_INDEX_CHECK_IS_OWNER(
       it,static_cast<typename IteratorType::container_type&>(*this));
-    return index::make_iterator(static_cast<node_type*>(it.get_node()));
+    return index_::make_iterator(static_cast<node_type*>(it.get_node()));
   }
 
   template<typename Tag,typename IteratorType>
@@ -432,7 +432,7 @@
     IteratorType it
     BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))const
   {
-    typedef typename index<Tag>::type index;
+    typedef typename index<Tag>::type index_;
 
 #if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
     BOOST_STATIC_ASSERT((
@@ -443,7 +443,7 @@
     BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
     BOOST_MULTI_INDEX_CHECK_IS_OWNER(
       it,static_cast<const typename IteratorType::container_type&>(*this));
-    return index::make_iterator(static_cast<node_type*>(it.get_node()));
+    return index_::make_iterator(static_cast<node_type*>(it.get_node()));
   }
 #endif
 
diff --git a/external/boost/boost.predef.Wundef.warnings.patch b/external/boost/boost.predef.Wundef.warnings.patch
deleted file mode 100644
index 81e8e23..0000000
--- a/external/boost/boost.predef.Wundef.warnings.patch
+++ /dev/null
@@ -1,11 +0,0 @@
--- foo/foo/foo/boost/predef/other/endian.h
+++ foo/foo/foo/boost/predef/other/endian.h
@@ -77,7 +77,7 @@
 #           undef BOOST_ENDIAN_LITTLE_BYTE
 #           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
 #       endif
-#       if (__BYTE_ORDER == __PDP_ENDIAN)
+#       if defined(__PDP_ENDIAN) && (__BYTE_ORDER == __PDP_ENDIAN)
 #           undef BOOST_ENDIAN_LITTLE_WORD
 #           define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE
 #       endif
diff --git a/external/boost/boost.preprocessor.Wundef.warnings.patch b/external/boost/boost.preprocessor.Wundef.warnings.patch
index 63fa958..1dc9888 100644
--- a/external/boost/boost.preprocessor.Wundef.warnings.patch
+++ b/external/boost/boost.preprocessor.Wundef.warnings.patch
@@ -1,18 +1,32 @@
--- foo/foo/foo/boost/preprocessor/config/config.hpp
+++ foo/foo/foo/boost/preprocessor/config/config.hpp
@@ -90,7 +90,7 @@
 #            define BOOST_PP_VARIADICS 0
 #        endif
diff -ur boost.orig/boost/preprocessor/config/config.hpp boost/boost/preprocessor/config/config.hpp
--- foo/misc/boost.orig/boost/preprocessor/config/config.hpp	2015-03-28 09:19:20.000000000 +0100
+++ foo/misc/boost/boost/preprocessor/config/config.hpp	2015-07-16 07:47:54.969987660 +0200
@@ -79,7 +79,7 @@
 #        define BOOST_PP_VARIADICS 1
 #        define BOOST_PP_VARIADICS_MSVC 1
 #    /* Wave (C/C++), GCC (C++) */
-#    elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && __GXX_EXPERIMENTAL_CXX0X__
+#    elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && defined __GXX_EXPERIMENTAL_CXX0X__ && __GXX_EXPERIMENTAL_CXX0X__
+#    elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__
 #        define BOOST_PP_VARIADICS 1
 #    /* EDG-based (C/C++), GCC (C), and unknown (C/C++) */
 #    elif !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L
--- foo/foo/foo/boost/preprocessor/tuple/elem.hpp
+++ foo/foo/foo/boost/preprocessor/tuple/elem.hpp
@@ -22,7 +22,7 @@
 # include <boost/preprocessor/variadic/elem.hpp>
diff -ur boost.orig/boost/preprocessor/tuple/detail/is_single_return.hpp boost/boost/preprocessor/tuple/detail/is_single_return.hpp
--- foo/misc/boost.orig/boost/preprocessor/tuple/detail/is_single_return.hpp	2015-03-28 09:19:20.000000000 +0100
+++ foo/misc/boost/boost/preprocessor/tuple/detail/is_single_return.hpp	2015-07-16 07:57:29.881981198 +0200
@@ -16,7 +16,7 @@
 #
 # /* BOOST_PP_TUPLE_IS_SINGLE_RETURN */
 #
-# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC
+# if BOOST_PP_VARIADICS && defined(BOOST_PP_VARIADICS_MSVC) && BOOST_PP_VARIADICS_MSVC
 # include <boost/preprocessor/control/iif.hpp>
 # include <boost/preprocessor/facilities/is_1.hpp>
 # include <boost/preprocessor/tuple/size.hpp>
diff -ur boost.orig/boost/preprocessor/tuple/elem.hpp boost/boost/preprocessor/tuple/elem.hpp
--- foo/misc/boost.orig/boost/preprocessor/tuple/elem.hpp	2015-03-28 09:19:20.000000000 +0100
+++ foo/misc/boost/boost/preprocessor/tuple/elem.hpp	2015-07-16 07:49:08.509986833 +0200
@@ -24,7 +24,7 @@
 # include <boost/preprocessor/tuple/detail/is_single_return.hpp>
 #
 # if BOOST_PP_VARIADICS
-#    if BOOST_PP_VARIADICS_MSVC
@@ -20,9 +34,30 @@
 #        define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__), (__VA_ARGS__))
 #        define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args)
 #        define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,)
--- foo/foo/foo/boost/preprocessor/tuple/rem.hpp
+++ foo/foo/foo/boost/preprocessor/tuple/rem.hpp
@@ -105,7 +105,7 @@
diff -ur boost.orig/boost/preprocessor/tuple/rem.hpp boost/boost/preprocessor/tuple/rem.hpp
--- foo/misc/boost.orig/boost/preprocessor/tuple/rem.hpp	2015-03-28 09:19:20.000000000 +0100
+++ foo/misc/boost/boost/preprocessor/tuple/rem.hpp	2015-07-16 07:59:19.084979971 +0200
@@ -22,7 +22,7 @@
 # /* BOOST_PP_REM */
 #
 # if BOOST_PP_VARIADICS
-# 	 if BOOST_PP_VARIADICS_MSVC
+# 	 if defined(BOOST_PP_VARIADICS_MSVC) && BOOST_PP_VARIADICS_MSVC
 		/* To be used internally when __VA_ARGS__ could be empty ( or is a single element ) */
 #    	define BOOST_PP_REM_CAT(...) BOOST_PP_CAT(__VA_ARGS__,)
 # 	 endif
@@ -36,8 +36,8 @@
 /*
   VC++8.0 cannot handle the variadic version of BOOST_PP_TUPLE_REM(size)
 */
-# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400)
-# 	 if BOOST_PP_VARIADICS_MSVC
+# if BOOST_PP_VARIADICS && !(defined(BOOST_PP_VARIADICS_MSVC) && BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400)
+# 	 if defined(BOOST_PP_VARIADICS_MSVC) && BOOST_PP_VARIADICS_MSVC
 		/* To be used internally when the size could be 0 ( or 1 ) */
 #    	define BOOST_PP_TUPLE_REM_CAT(size) BOOST_PP_REM_CAT
 # 	 endif
@@ -120,7 +120,7 @@
 # /* BOOST_PP_TUPLE_REM_CTOR */
 #
 # if BOOST_PP_VARIADICS
@@ -31,9 +66,22 @@
 #        define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__), (__VA_ARGS__))
 #        define BOOST_PP_TUPLE_REM_CTOR_I(m, args) BOOST_PP_TUPLE_REM_CTOR_II(m, args)
 #        define BOOST_PP_TUPLE_REM_CTOR_II(m, args) BOOST_PP_CAT(m ## args,)
--- foo/foo/foo/boost/preprocessor/tuple/to_list.hpp
+++ foo/foo/foo/boost/preprocessor/tuple/to_list.hpp
@@ -23,7 +23,7 @@
diff -ur boost.orig/boost/preprocessor/tuple/size.hpp boost/boost/preprocessor/tuple/size.hpp
--- foo/misc/boost.orig/boost/preprocessor/tuple/size.hpp	2015-03-28 09:19:20.000000000 +0100
+++ foo/misc/boost/boost/preprocessor/tuple/size.hpp	2015-07-16 07:58:30.296980519 +0200
@@ -18,7 +18,7 @@
 # include <boost/preprocessor/variadic/size.hpp>
 #
 # if BOOST_PP_VARIADICS
-#    if BOOST_PP_VARIADICS_MSVC
+#    if defined(BOOST_PP_VARIADICS_MSVC) && BOOST_PP_VARIADICS_MSVC
 #        define BOOST_PP_TUPLE_SIZE(tuple) BOOST_PP_CAT(BOOST_PP_VARIADIC_SIZE tuple,)
 #    else
 #        define BOOST_PP_TUPLE_SIZE(tuple) BOOST_PP_VARIADIC_SIZE tuple
diff -ur boost.orig/boost/preprocessor/tuple/to_list.hpp boost/boost/preprocessor/tuple/to_list.hpp
--- foo/misc/boost.orig/boost/preprocessor/tuple/to_list.hpp	2015-03-28 09:19:20.000000000 +0100
+++ foo/misc/boost/boost/preprocessor/tuple/to_list.hpp	2015-07-16 07:51:25.693985291 +0200
@@ -24,7 +24,7 @@
 # /* BOOST_PP_TUPLE_TO_LIST */
 #
 # if BOOST_PP_VARIADICS
@@ -42,8 +90,9 @@
 #        define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__), (__VA_ARGS__))
 #        define BOOST_PP_TUPLE_TO_LIST_I(m, args) BOOST_PP_TUPLE_TO_LIST_II(m, args)
 #        define BOOST_PP_TUPLE_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,)
--- foo/foo/foo/boost/preprocessor/variadic/elem.hpp
+++ foo/foo/foo/boost/preprocessor/variadic/elem.hpp
diff -ur boost.orig/boost/preprocessor/variadic/elem.hpp boost/boost/preprocessor/variadic/elem.hpp
--- foo/misc/boost.orig/boost/preprocessor/variadic/elem.hpp	2015-03-28 09:19:20.000000000 +0100
+++ foo/misc/boost/boost/preprocessor/variadic/elem.hpp	2015-07-16 07:54:03.513983517 +0200
@@ -19,7 +19,7 @@
 # /* BOOST_PP_VARIADIC_ELEM */
 #
@@ -53,8 +102,9 @@
 #        define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_VARIADIC_ELEM_I(n,__VA_ARGS__)
 #        define BOOST_PP_VARIADIC_ELEM_I(n, ...) BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,),)
 #    else
--- foo/foo/foo/boost/preprocessor/variadic/size.hpp
+++ foo/foo/foo/boost/preprocessor/variadic/size.hpp
diff -ur boost.orig/boost/preprocessor/variadic/size.hpp boost/boost/preprocessor/variadic/size.hpp
--- foo/misc/boost.orig/boost/preprocessor/variadic/size.hpp	2015-03-28 09:19:20.000000000 +0100
+++ foo/misc/boost/boost/preprocessor/variadic/size.hpp	2015-07-16 07:52:45.303984396 +0200
@@ -19,7 +19,7 @@
 # /* BOOST_PP_VARIADIC_SIZE */
 #
@@ -64,3 +114,24 @@
 #        define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_CAT(BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),)
 #    else
 #        define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,)
diff -ur boost.orig/boost/tuple/detail/tuple_basic.hpp boost/boost/tuple/detail/tuple_basic.hpp
--- foo/misc/boost.orig/boost/tuple/detail/tuple_basic.hpp	2014-05-12 01:27:34.000000000 +0200
+++ foo/misc/boost/boost/tuple/detail/tuple_basic.hpp	2015-07-16 08:00:29.269979182 +0200
@@ -41,7 +41,7 @@
 
 #include "boost/detail/workaround.hpp" // needed for BOOST_WORKAROUND
 
-#if BOOST_GCC >= 40700
+#if defined(BOOST_GCC) && BOOST_GCC >= 40700
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
 #endif
@@ -979,7 +979,7 @@
 } // end of namespace boost
 
 
-#if BOOST_GCC >= 40700
+#if defined(BOOST_GCC) && BOOST_GCC >= 40700
 #pragma GCC diagnostic pop
 #endif
 
diff --git a/external/boost/boost.property_tree.Wshadow.warnings.patch.1 b/external/boost/boost.property_tree.Wshadow.warnings.patch.1
index 65e4cae..64d020b 100644
--- a/external/boost/boost.property_tree.Wshadow.warnings.patch.1
+++ b/external/boost/boost.property_tree.Wshadow.warnings.patch.1
@@ -1,5 +1,6 @@
--- boost/boost/property_tree/detail/json_parser_error.hpp	2007-05-13 00:02:53.000000000 +0200
+++ boost/boost/property_tree/detail/json_parser_error.hpp	2013-05-17 15:36:44.605902442 +0200
diff -ru boost.orig/boost/property_tree/detail/json_parser_error.hpp boost/boost/property_tree/detail/json_parser_error.hpp
--- boost.orig/boost/property_tree/detail/json_parser_error.hpp	2015-07-07 14:20:48.000000000 +0200
+++ boost/boost/property_tree/detail/json_parser_error.hpp	2015-07-19 11:16:35.699957767 +0200
@@ -20,10 +20,10 @@
     class json_parser_error: public file_parser_error
     {
@@ -8,92 +9,17 @@
-                          const std::string &filename, 
-                          unsigned long line): 
-            file_parser_error(message, filename, line)
+        json_parser_error(const std::string &message_,
+                          const std::string &filename_,
+                          unsigned long line_):
+        json_parser_error(const std::string &message_, 
+                          const std::string &filename_, 
+                          unsigned long line_): 
+            file_parser_error(message_, filename_, line_)
         { 
         }
     };
--- boost/boost/property_tree/detail/json_parser_read.hpp	2013-05-17 15:57:23.740638395 +0200
+++ boost/boost/property_tree/detail/json_parser_read.hpp	2013-05-17 15:31:05.666857356 +0200
@@ -45,7 +45,7 @@
         struct a_object_s
         {
             context &c;
-            a_object_s(context &c): c(c) { }
+            a_object_s(context &c_): c(c_) { }
             void operator()(Ch) const
             {
                 if (c.stack.empty())
@@ -63,7 +63,7 @@
         struct a_object_e
         {
             context &c;
-            a_object_e(context &c): c(c) { }
+            a_object_e(context &c_): c(c_) { }
             void operator()(Ch) const
             {
                 BOOST_ASSERT(c.stack.size() >= 1);
@@ -74,7 +74,7 @@
         struct a_name
         {
             context &c;
-            a_name(context &c): c(c) { }
+            a_name(context &c_): c(c_) { }
             void operator()(It, It) const
             {
                 c.name.swap(c.string);
@@ -85,7 +85,7 @@
         struct a_string_val
         {
             context &c;
-            a_string_val(context &c): c(c) { }
+            a_string_val(context &c_): c(c_) { }
             void operator()(It, It) const
             {
                 BOOST_ASSERT(c.stack.size() >= 1);
@@ -98,7 +98,7 @@
         struct a_literal_val
         {
             context &c;
-            a_literal_val(context &c): c(c) { }
+            a_literal_val(context &c_): c(c_) { }
             void operator()(It b, It e) const
             {
                 BOOST_ASSERT(c.stack.size() >= 1);
@@ -111,8 +111,8 @@
         struct a_char
         {
             context &c;
-            a_char(context &c): c(c) { }
-            void operator()(It b, It e) const
+            a_char(context &c_): c(c_) { }
+            void operator()(It b, It /* e */) const
             {
                 c.string += *b;
             }
@@ -121,7 +121,7 @@
         struct a_escape
         {
             context &c;
-            a_escape(context &c): c(c) { }
+            a_escape(context &c_): c(c_) { }
             void operator()(Ch ch) const
             {
                 switch (ch)
@@ -142,7 +142,7 @@
         struct a_unicode
         {
             context &c;
-            a_unicode(context &c): c(c) { }
+            a_unicode(context &c_): c(c_) { }
             void operator()(unsigned long u) const
             {
                 u = (std::min)(u, static_cast<unsigned long>((std::numeric_limits<Ch>::max)()));
--- boost/boost/property_tree/detail/ptree_implementation.hpp	2010-07-03 22:59:45.000000000 +0200
+++ boost/boost/property_tree/detail/ptree_implementation.hpp	2013-05-17 15:55:56.449713452 +0200
@@ -539,48 +539,48 @@
diff -ru boost.orig/boost/property_tree/detail/ptree_implementation.hpp boost/boost/property_tree/detail/ptree_implementation.hpp
--- boost.orig/boost/property_tree/detail/ptree_implementation.hpp	2015-07-07 14:20:48.000000000 +0200
+++ boost/boost/property_tree/detail/ptree_implementation.hpp	2015-07-18 23:33:04.165906803 +0200
@@ -568,48 +568,48 @@
 
     template<class K, class D, class C>
     basic_ptree<K, D, C> &
@@ -153,7 +79,7 @@
         self_type *n = walk_path(p);
         if (!n) {
             return optional<self_type&>();
@@ -590,9 +590,9 @@
@@ -619,9 +619,9 @@
 
     template<class K, class D, class C>
     optional<const basic_ptree<K, D, C> &>
@@ -165,7 +91,7 @@
         self_type *n = walk_path(p);
         if (!n) {
             return optional<const self_type&>();
@@ -602,10 +602,10 @@
@@ -631,10 +631,10 @@
 
     template<class K, class D, class C>
     basic_ptree<K, D, C> &
@@ -178,7 +104,7 @@
         self_type &parent = force_path(p);
         // Got the parent. Now get the correct child.
         key_type fragment = p.reduce();
@@ -620,10 +620,10 @@
@@ -649,10 +649,10 @@
 
     template<class K, class D, class C>
     basic_ptree<K, D, C> &
@@ -191,7 +117,7 @@
         self_type &parent = force_path(p);
         // Got the parent.
         key_type fragment = p.reduce();
@@ -709,26 +709,26 @@
@@ -738,26 +738,26 @@
     template<class K, class D, class C>
     template<class Type, class Translator> inline
     typename boost::enable_if<detail::is_translator<Translator>, Type>::type
@@ -224,7 +150,7 @@
     }
 
     template<class K, class D, class C>
@@ -738,18 +738,18 @@
@@ -767,18 +767,18 @@
         std::basic_string<Ch>
     >::type
     basic_ptree<K, D, C>::get(
@@ -247,7 +173,7 @@
     }
 
     template<class K, class D, class C>
@@ -759,17 +759,17 @@
@@ -788,17 +788,17 @@
         std::basic_string<Ch>
     >::type
     basic_ptree<K, D, C>::get(
@@ -269,7 +195,7 @@
             return child.get().
                 BOOST_NESTED_TEMPLATE get_value_optional<Type>(tr);
         else
@@ -778,9 +778,9 @@
@@ -808,9 +808,9 @@
     template<class K, class D, class C>
     template<class Type>
     optional<Type> basic_ptree<K, D, C>::get_optional(
@@ -281,7 +207,7 @@
             return child.get().BOOST_NESTED_TEMPLATE get_value_optional<Type>();
         else
             return optional<Type>();
@@ -809,13 +809,13 @@
@@ -839,13 +839,13 @@
     template<class K, class D, class C>
     template<class Type, typename Translator>
     basic_ptree<K, D, C> & basic_ptree<K, D, C>::put(
@@ -298,7 +224,7 @@
             child2.put_value(value, tr);
             return child2;
         }
@@ -824,18 +824,18 @@
@@ -854,18 +854,18 @@
     template<class K, class D, class C>
     template<class Type> inline
     basic_ptree<K, D, C> & basic_ptree<K, D, C>::put(
@@ -321,7 +247,7 @@
         child.put_value(value, tr);
         return child;
     }
@@ -843,9 +843,9 @@
@@ -873,9 +873,9 @@
     template<class K, class D, class C>
     template<class Type> inline
     basic_ptree<K, D, C> & basic_ptree<K, D, C>::add(
@@ -333,11 +259,12 @@
                    typename translator_between<data_type, Type>::type());
     }
 
--- a/boost/property_tree/string_path.hpp
+++ a/boost/property_tree/string_path.hpp
@@ -88,14 +88,14 @@ namespace boost { namespace property_tree
diff -ru boost.orig/boost/property_tree/string_path.hpp boost/boost/property_tree/string_path.hpp
--- boost.orig/boost/property_tree/string_path.hpp	2015-07-07 14:20:48.000000000 +0200
+++ boost/boost/property_tree/string_path.hpp	2015-07-18 23:33:41.749906380 +0200
@@ -88,14 +88,14 @@
         typedef typename String::value_type char_type;

 
         /// Create an empty path.
-        explicit string_path(char_type separator = char_type('.'));
+        explicit string_path(char_type separator_ = char_type('.'));
@@ -352,25 +279,25 @@
                     Translator tr = Translator());
         /// Create a path by parsing the given string.
         /// @param value A zero-terminated array of values. Only use if zero-
@@ -106,7 +106,7 @@ namespace boost { namespace property_tree
@@ -106,7 +106,7 @@
         /// @param tr The translator used by this path to convert the individual
         ///           parts to keys.
         string_path(const char_type *value,
-                    char_type separator = char_type('.'),
+                    char_type separator_ = char_type('.'),
                     Translator tr = Translator());

 
         // Default copying doesn't do the right thing with the iterator
@@ -162,23 +162,23 @@ namespace boost { namespace property_tree
@@ -162,23 +162,23 @@
     };

 
     template <typename String, typename Translator> inline
-    string_path<String, Translator>::string_path(char_type separator)
-        : m_separator(separator), m_start(m_value.begin())
+    string_path<String, Translator>::string_path(char_type separator_)
+        : m_separator(separator_), m_start(m_value.begin())
     {}

 
     template <typename String, typename Translator> inline
     string_path<String, Translator>::string_path(const String &value,
-                                                 char_type separator,
@@ -380,7 +307,7 @@
+        : m_value(value), m_separator(separator_),
           m_tr(tr), m_start(m_value.begin())
     {}

 
     template <typename String, typename Translator> inline
     string_path<String, Translator>::string_path(const char_type *value,
-                                                 char_type separator,
@@ -390,4 +317,4 @@
+        : m_value(value), m_separator(separator_),
           m_tr(tr), m_start(m_value.begin())
     {}

 
diff --git a/external/boost/boost.property_tree.Wtype-limits.warnings.patch.1 b/external/boost/boost.property_tree.Wtype-limits.warnings.patch.1
deleted file mode 100644
index e4c7ede..0000000
--- a/external/boost/boost.property_tree.Wtype-limits.warnings.patch.1
+++ /dev/null
@@ -1,41 +0,0 @@
diff -ur boost.org/boost/property_tree/detail/json_parser_write.hpp boost/boost/property_tree/detail/json_parser_write.hpp
--- boost.org/boost/property_tree/detail/json_parser_write.hpp	2014-04-20 13:27:59.126224368 +0300
+++ boost/boost/property_tree/detail/json_parser_write.hpp	2014-04-20 13:32:35.206229552 +0300
@@ -29,25 +29,26 @@
         typename std::basic_string<Ch>::const_iterator e = s.end();
         while (b != e)
         {
+            typename std::basic_string<Ch>::traits_type::int_type bDref = *b;
             // This assumes an ASCII superset. But so does everything in PTree.
             // We escape everything outside ASCII, because this code can't
             // handle high unicode characters.
-            if (*b == 0x20 || *b == 0x21 || (*b >= 0x23 && *b <= 0x2E) ||
-                (*b >= 0x30 && *b <= 0x5B) || (*b >= 0x5D && *b <= 0xFF))
-                result += *b;
-            else if (*b == Ch('\b')) result += Ch('\\'), result += Ch('b');
-            else if (*b == Ch('\f')) result += Ch('\\'), result += Ch('f');
-            else if (*b == Ch('\n')) result += Ch('\\'), result += Ch('n');
-            else if (*b == Ch('\r')) result += Ch('\\'), result += Ch('r');
-            else if (*b == Ch('/')) result += Ch('\\'), result += Ch('/');
-            else if (*b == Ch('"'))  result += Ch('\\'), result += Ch('"');
-            else if (*b == Ch('\\')) result += Ch('\\'), result += Ch('\\');
+            if (bDref == 0x20 || bDref == 0x21 || (bDref >= 0x23 && bDref <= 0x2E) ||
+                (bDref >= 0x30 && bDref <= 0x5B) || (bDref >= 0x5D && bDref <= 0xFF))
+                result += bDref;
+            else if (bDref == Ch('\b')) result += Ch('\\'), result += Ch('b');
+            else if (bDref == Ch('\f')) result += Ch('\\'), result += Ch('f');
+            else if (bDref == Ch('\n')) result += Ch('\\'), result += Ch('n');
+            else if (bDref == Ch('\r')) result += Ch('\\'), result += Ch('r');
+            else if (bDref == Ch('/')) result += Ch('\\'), result += Ch('/');
+            else if (bDref == Ch('"'))  result += Ch('\\'), result += Ch('"');
+            else if (bDref == Ch('\\')) result += Ch('\\'), result += Ch('\\');
             else
             {
                 const char *hexdigits = "0123456789ABCDEF";
                 typedef typename make_unsigned<Ch>::type UCh;
                 unsigned long u = (std::min)(static_cast<unsigned long>(
-                                                 static_cast<UCh>(*b)),
+                                                 static_cast<UCh>(bDref)),
                                              0xFFFFul);
                 int d1 = u / 4096; u -= d1 * 4096;
                 int d2 = u / 256; u -= d2 * 256;
diff --git a/external/boost/boost.random.Wshadow.warnings.patch b/external/boost/boost.random.Wshadow.warnings.patch
deleted file mode 100644
index 17c0f59..0000000
--- a/external/boost/boost.random.Wshadow.warnings.patch
+++ /dev/null
@@ -1,277 +0,0 @@
--- misc/boost_1_44_0/boost/random/mersenne_twister.hpp
+++ misc/build/boost_1_44_0/boost/random/mersenne_twister.hpp
@@ -195,19 +195,19 @@
      * Returns true if the two generators are in the same state,
      * and will thus produce identical sequences.
      */
-    friend bool operator==(const mersenne_twister_engine& x,
-                           const mersenne_twister_engine& y)
+    friend bool operator==(const mersenne_twister_engine& x_arg,
+                           const mersenne_twister_engine& y_arg)
     {
-        if(x.i < y.i) return x.equal_imp(y);
-        else return y.equal_imp(x);
+        if(x_arg.i < y_arg.i) return x_arg.equal_imp(y_arg);
+        else return y_arg.equal_imp(x_arg);
     }
     
     /**
      * Returns true if the two generators are in different states.
      */
-    friend bool operator!=(const mersenne_twister_engine& x,
-                           const mersenne_twister_engine& y)
-    { return !(x == y); }
+    friend bool operator!=(const mersenne_twister_engine& x_arg,
+                           const mersenne_twister_engine& y_arg)
+    { return !(x_arg == y_arg); }
 
 private:
     /// \cond show_private
--- foo/foo/foo/boost/random/binomial_distribution.hpp
+++ foo/foo/foo/boost/random/binomial_distribution.hpp
@@ -272,21 +272,21 @@
         using std::sqrt;
         using std::pow;
 
-        RealType p = (0.5 < _p)? (1 - _p) : _p;
-        IntType t = _t;
+        RealType p_lcl = (0.5 < _p)? (1 - _p) : _p;
+        IntType t_lcl = _t;
         
-        m = static_cast<IntType>((t+1)*p);
+        m = static_cast<IntType>((t_lcl+1)*p_lcl);
 
         if(use_inversion()) {
-            q_n = pow((1 - p), static_cast<RealType>(t));
+            q_n = pow((1 - p_lcl), static_cast<RealType>(t_lcl));
         } else {
-            btrd.r = p/(1-p);
-            btrd.nr = (t+1)*btrd.r;
-            btrd.npq = t*p*(1-p);
+            btrd.r = p_lcl/(1-p_lcl);
+            btrd.nr = (t_lcl+1)*btrd.r;
+            btrd.npq = t_lcl*p_lcl*(1-p_lcl);
             RealType sqrt_npq = sqrt(btrd.npq);
             btrd.b = 1.15 + 2.53 * sqrt_npq;
-            btrd.a = -0.0873 + 0.0248*btrd.b + 0.01*p;
-            btrd.c = t*p + 0.5;
+            btrd.a = -0.0873 + 0.0248*btrd.b + 0.01*p_lcl;
+            btrd.c = t_lcl*p_lcl + 0.5;
             btrd.alpha = (2.83 + 5.1/btrd.b) * sqrt_npq;
             btrd.v_r = 0.92 - 4.2/btrd.b;
             btrd.u_rv_r = 0.86*btrd.v_r;
@@ -304,9 +304,9 @@
             RealType u;
             RealType v = uniform_01<RealType>()(urng);
             if(v <= btrd.u_rv_r) {
-                RealType u = v/btrd.v_r - 0.43;
+                RealType u_lcl = v/btrd.v_r - 0.43;
                 return static_cast<IntType>(floor(
-                    (2*btrd.a/(0.5 - abs(u)) + btrd.b)*u + btrd.c));
+                    (2*btrd.a/(0.5 - abs(u_lcl)) + btrd.b)*u_lcl + btrd.c));
             }
 
             if(v >= btrd.v_r) {
@@ -344,9 +344,9 @@
                 v = log(v);
                 RealType rho =
                     (km/btrd.npq)*(((km/3. + 0.625)*km + 1./6)/btrd.npq + 0.5);
-                RealType t = -km*km/(2*btrd.npq);
-                if(v < t - rho) return k;
-                if(v > t + rho) continue;
+                RealType t_lcl = -km*km/(2*btrd.npq);
+                if(v < t_lcl - rho) return k;
+                if(v > t_lcl + rho) continue;
 
                 IntType nm = _t - m + 1;
                 RealType h = (m + 0.5)*log((m + 1)/(btrd.r*nm))
@@ -367,11 +367,11 @@
     }
 
     template<class URNG>
-    IntType invert(IntType t, RealType p, URNG& urng) const
+    IntType invert(IntType t_arg, RealType p_arg, URNG& urng) const
     {
-        RealType q = 1 - p;
-        RealType s = p / q;
-        RealType a = (t + 1) * s;
+        RealType q = 1 - p_arg;
+        RealType s = p_arg / q;
+        RealType a = (t_arg + 1) * s;
         RealType r = q_n;
         RealType u = uniform_01<RealType>()(urng);
         IntType x = 0;
--- foo/foo/foo/boost/random/geometric_distribution.hpp
+++ foo/foo/foo/boost/random/geometric_distribution.hpp
@@ -104,8 +104,8 @@
      *
      * Requires: 0 < p < 1
      */
-    explicit geometric_distribution(const RealType& p = RealType(0.5))
-      : _p(p)
+    explicit geometric_distribution(const RealType& p_arg = RealType(0.5))
+      : _p(p_arg)
     {
         BOOST_ASSERT(RealType(0) < _p && _p < RealType(1));
         init();
--- foo/foo/foo/boost/random/shuffle_order.hpp
+++ foo/foo/foo/boost/random/shuffle_order.hpp
@@ -200,8 +200,8 @@
     }
 
     /** Returns true if the two generators will produce identical sequences. */
-    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(shuffle_order_engine, x, y)
-    { return x._rng == y._rng && x.y == y.y && std::equal(x.v, x.v+k, y.v); }
+    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(shuffle_order_engine, x, y_arg)
+    { return x._rng == y_arg._rng && x.y == y_arg.y && std::equal(x.v, x.v+k, y_arg.v); }
     /** Returns true if the two generators will produce different sequences. */
     BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(shuffle_order_engine)
 
--- foo/foo/foo/boost/random/subtract_with_carry.hpp
+++ foo/foo/foo/boost/random/subtract_with_carry.hpp
@@ -249,10 +249,10 @@
      * Returns true if the two generators will produce identical
      * sequences of values.
      */
-    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(subtract_with_carry_engine, x, y)
+    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(subtract_with_carry_engine, x_arg, y_arg)
     {
         for(unsigned int j = 0; j < r; ++j)
-            if(x.compute(j) != y.compute(j))
+            if(x_arg.compute(j) != y_arg.compute(j))
                 return false;
         return true;
     }
@@ -268,21 +268,21 @@
 
     friend struct detail::subtract_with_carry_discard;
 
-    IntType do_update(std::size_t current, std::size_t short_index, IntType carry)
+    IntType do_update(std::size_t current, std::size_t short_index, IntType carry_arg)
     {
         IntType delta;
-        IntType temp = x[current] + carry;
+        IntType temp = x[current] + carry_arg;
         if (x[short_index] >= temp) {
             // x(n) >= 0
             delta =  x[short_index] - temp;
-            carry = 0;
+            carry_arg = 0;
         } else {
             // x(n) < 0
             delta = modulus - temp + x[short_index];
-            carry = 1;
+            carry_arg = 1;
         }
         x[current] = delta;
-        return carry;
+        return carry_arg;
     }
     /// \endcond
 
@@ -483,10 +483,10 @@
     }
 
     /** Returns true if the two generators will produce identical sequences. */
-    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(subtract_with_carry_01_engine, x, y)
+    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(subtract_with_carry_01_engine, x_arg, y_arg)
     {
         for(unsigned int j = 0; j < r; ++j)
-            if(x.compute(j) != y.compute(j))
+            if(x_arg.compute(j) != y_arg.compute(j))
                 return false;
         return true;
     }
@@ -498,17 +498,17 @@
 
     friend struct detail::subtract_with_carry_discard;
 
-    RealType do_update(std::size_t current, std::size_t short_index, RealType carry)
+    RealType do_update(std::size_t current, std::size_t short_index, RealType carry_arg)
     {
-        RealType delta = x[short_index] - x[current] - carry;
+        RealType delta = x[short_index] - x[current] - carry_arg;
         if(delta < 0) {
             delta += RealType(1);
-            carry = RealType(1)/_modulus;
+            carry_arg = RealType(1)/_modulus;
         } else {
-            carry = 0;
+            carry_arg = 0;
         }
         x[current] = delta;
-        return carry;
+        return carry_arg;
     }
     /// \endcond
     std::size_t k;
--- misc/boost_1_44_0/boost/random/lagged_fibonacci.hpp
+++ misc/build/boost_1_44_0/boost/random/lagged_fibonacci.hpp
@@ -148,8 +148,8 @@
     BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, lagged_fibonacci_engine, f)
     {
         os << f.i;
-        for(unsigned int i = 0; i < f.long_lag; ++i)
-            os << ' ' << f.x[i];
+        for(unsigned int i_index = 0; i_index < f.long_lag; ++i_index)
+            os << ' ' << f.x[i_index];
         return os;
     }
     
@@ -159,17 +159,17 @@
     BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, lagged_fibonacci_engine, f)
     {
         is >> f.i >> std::ws;
-        for(unsigned int i = 0; i < f.long_lag; ++i)
-            is >> f.x[i] >> std::ws;
+        for(unsigned int i_index = 0; i_index < f.long_lag; ++i_index)
+            is >> f.x[i_index] >> std::ws;
         return is;
     }
     
     /**
      * Returns true if the two generators will produce identical
      * sequences of outputs.
      */
-    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(lagged_fibonacci_engine, x, y)
-    { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); }
+    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(lagged_fibonacci_engine, x_arg, y_arg)
+    { return x_arg.i == y_arg.i && std::equal(x_arg.x, x_arg.x+long_lag, y_arg.x); }
     
     /**
      * Returns true if the two generators will produce different
@@ -359,8 +359,8 @@
         using std::pow;
         os << f.i;
         std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left); 
-        for(unsigned int i = 0; i < f.long_lag; ++i)
-            os << ' ' << f.x[i] * f.modulus();
+        for(unsigned int i_index = 0; i_index < f.long_lag; ++i_index)
+            os << ' ' << f.x[i_index] * f.modulus();
         os.flags(oldflags);
         return os;
     }
@@ -371,10 +371,10 @@
     BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, lagged_fibonacci_01_engine, f)
     {
         is >> f.i;
-        for(unsigned int i = 0; i < f.long_lag; ++i) {
+        for(unsigned int i_index = 0; i_index < f.long_lag; ++i_index) {
             typename lagged_fibonacci_01_engine::result_type value;
             is >> std::ws >> value;
-            f.x[i] = value / f.modulus();
+            f.x[i_index] = value / f.modulus();
         }
         return is;
     }
@@ -383,8 +383,8 @@
      * Returns true if the two generators will produce identical
      * sequences of outputs.
      */
-    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(lagged_fibonacci_01_engine, x, y)
-    { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); }
+    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(lagged_fibonacci_01_engine, x_arg, y_arg)
+    { return x_arg.i == y_arg.i && std::equal(x_arg.x, x_arg.x+long_lag, y_arg.x); }
     
     /**
      * Returns true if the two generators will produce different
diff --git a/external/boost/boost.random.Wunused-local-typedefs.warnings.patch b/external/boost/boost.random.Wunused-local-typedefs.warnings.patch
index 7d48742..73f8c0b 100644
--- a/external/boost/boost.random.Wunused-local-typedefs.warnings.patch
+++ b/external/boost/boost.random.Wunused-local-typedefs.warnings.patch
@@ -1,20 +1,11 @@
--- a/b/boost/boost/random/generate_canonical.hpp	2013-05-31 18:13:09.804149686 +0200
+++ a/b/boost/boost/random/generate_canonical.hpp	2013-05-31 18:13:30.020195845 +0200
@@ -55,7 +55,6 @@
     using std::floor;
     BOOST_ASSERT((g.min)() == 0);
     BOOST_ASSERT((g.max)() == 1);
diff -ru boost.orig/boost/random/generate_canonical.hpp boost/boost/random/generate_canonical.hpp
--- a/b/boost.orig/boost/random/generate_canonical.hpp	2015-02-27 18:44:45.000000000 +0100
+++ a/b/boost/boost/random/generate_canonical.hpp	2015-07-18 21:55:44.152972440 +0200
@@ -32,7 +32,6 @@
 RealType generate_canonical_impl(URNG& g, boost::mpl::true_ /*is_integral*/)
 {
     using std::pow;
-    typedef typename URNG::result_type base_result;
     std::size_t digits = std::numeric_limits<RealType>::digits;
     std::size_t engine_bits = detail::generator_bits<URNG>::value();
     std::size_t b = (std::min)(bits, digits);
--- a/b/boost/boost/random/uniform_real_distribution.hpp	2013-05-31 18:15:04.571429634 +0200
+++ a/b/boost/boost/random/uniform_real_distribution.hpp	2013-05-31 18:14:28.452337186 +0200
@@ -36,7 +36,6 @@
 {
     for(;;) {
         typedef T result_type;
-        typedef typename Engine::result_type base_result;
         result_type numerator = static_cast<T>(eng() - (eng.min)());
         result_type divisor = static_cast<T>((eng.max)() - (eng.min)());
         BOOST_ASSERT(divisor > 0);
     RealType R = RealType((g.max)()) - RealType((g.min)()) + 1;
     RealType mult = R;
diff --git a/external/boost/boost.spirit.Wunused-local-typedefs.warnings.patch b/external/boost/boost.spirit.Wunused-local-typedefs.warnings.patch
index babe844..5551080 100644
--- a/external/boost/boost.spirit.Wunused-local-typedefs.warnings.patch
+++ b/external/boost/boost.spirit.Wunused-local-typedefs.warnings.patch
@@ -1,23 +1,23 @@
--- misc/boost_1_44_0/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
@@ -307,7 +307,6 @@
diff -ru boost.orig/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp	2015-07-18 21:46:45.774978491 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp	2015-07-18 21:59:52.339969650 +0200
@@ -282,12 +282,12 @@
 #if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
         typedef impl::grammar_helper_base<GrammarT> helper_base_t;
         typedef grammar_helper_list<GrammarT> helper_list_t;
-        typedef typename helper_list_t::vector_t::reverse_iterator iterator_t;
 
         helper_list_t&  helpers =
 # if !defined(__GNUC__) || (__GNUC__ > 2)
@@ -318,6 +317,7 @@
         grammartract_helper_list::do_(self);
 
 # if (defined(BOOST_MSVC) && (BOOST_MSVC < 1300)) \
     || defined(BOOST_INTEL_CXX_VERSION)
 # if defined(BOOST_INTEL_CXX_VERSION)
+        typedef typename helper_list_t::vector_t::reverse_iterator iterator_t;
         for (iterator_t i = helpers.rbegin(); i != helpers.rend(); ++i)
             (*i)->undefine(self);
 # else
--- misc/boost_1_44_0/boost/spirit/home/classic/core/primitives/primitives.hpp
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/primitives/primitives.hpp
diff -ru boost.orig/boost/spirit/home/classic/core/primitives/primitives.hpp boost/boost/spirit/home/classic/core/primitives/primitives.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/primitives/primitives.hpp	2015-07-18 21:46:45.775978491 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/primitives/primitives.hpp	2015-07-18 22:03:35.695967140 +0200
@@ -47,7 +47,6 @@
         typename parser_result<self_t, ScannerT>::type
         parse(ScannerT const& scan) const
@@ -26,8 +26,9 @@
             typedef typename ScannerT::value_t value_t;
             typedef typename ScannerT::iterator_t iterator_t;
 
--- misc/boost_1_44_0/boost/spirit/home/classic/error_handling/exceptions.hpp
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/error_handling/exceptions.hpp
diff -ru boost.orig/boost/spirit/home/classic/error_handling/exceptions.hpp boost/boost/spirit/home/classic/error_handling/exceptions.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/error_handling/exceptions.hpp	2015-07-18 21:46:45.768978491 +0200
+++ foo/misc/boost/boost/spirit/home/classic/error_handling/exceptions.hpp	2015-07-18 22:00:33.396969189 +0200
@@ -140,7 +140,6 @@
         parse(ScannerT const& scan) const
         {
@@ -36,14 +37,3 @@
 
             result_t hit = this->subject().parse(scan);
             if (!hit)
--- misc/boost_1_44_0/boost/spirit/home/classic/utility/functor_parser.hpp
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/utility/functor_parser.hpp
@@ -49,8 +49,6 @@
         typename parser_result<self_t, ScannerT>::type
         parse(ScannerT const& scan) const
         {
-            typedef typename parser_result<self_t, ScannerT>::type result_t;
-            typedef typename ScannerT::value_t      value_t;
             typedef typename ScannerT::iterator_t   iterator_t;
 
             iterator_t const s(scan.first);
diff --git a/external/boost/boost.std.move.patch b/external/boost/boost.std.move.patch
index c6cc329..7c0dfb9 100644
--- a/external/boost/boost.std.move.patch
+++ b/external/boost/boost.std.move.patch
@@ -1,15 +1,16 @@
--- foo/foo/foo/boost/config/compiler/clang.hpp
+++ foo/foo/foo/boost/config/compiler/clang.hpp
diff -ru boost.orig/boost/config/compiler/clang.hpp boost/boost/config/compiler/clang.hpp
--- foo/misc/boost.orig/boost/config/compiler/clang.hpp	2015-05-07 19:11:52.000000000 +0200
+++ foo/misc/boost/boost/config/compiler/clang.hpp	2015-07-18 22:40:56.304941957 +0200
@@ -10,6 +10,8 @@
 
 #define BOOST_HAS_PRAGMA_ONCE
 
+#include <utility>
+
 #if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)
 #  define BOOST_NO_EXCEPTIONS
 #endif
@@ -128,7 +130,7 @@
 // Detecting `-fms-extension` compiler flag assuming that _MSC_VER defined when that flag is used.
 #if defined (_MSC_VER) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4))
 #   define BOOST_HAS_PRAGMA_DETECT_MISMATCH
@@ -161,7 +163,7 @@
 #  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
 #endif
 
diff --git a/external/boost/boost.transform_width.patch b/external/boost/boost.transform_width.patch
deleted file mode 100644
index 747a17d..0000000
--- a/external/boost/boost.transform_width.patch
+++ /dev/null
@@ -1,11 +0,0 @@
--- foo/foo/foo/boost/archive/iterators/transform_width.hpp
+++ foo/foo/foo/boost/archive/iterators/transform_width.hpp
@@ -23,6 +23,8 @@
 // stream length is some common multiple of x and y.  E.G. Base64 6 bit
 // character and 8 bit bytes. Lowest common multiple is 24 => 4 6 bit characters
 // or 3 8 bit characters
+
+#include <algorithm>
 
 #include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME & PTFO
 #include <boost/serialization/pfto.hpp>
diff --git a/external/boost/boost.tuple.Wunused-local-typedefs.warnings.patch b/external/boost/boost.tuple.Wunused-local-typedefs.warnings.patch
deleted file mode 100644
index dd05a1f..0000000
--- a/external/boost/boost.tuple.Wunused-local-typedefs.warnings.patch
+++ /dev/null
@@ -1,10 +0,0 @@
--- a/b/boost/boost/tuple/detail/tuple_basic.hpp	2013-05-31 13:31:21.682966336 +0200
+++ a/b/boost/boost/tuple/detail/tuple_basic.hpp	2013-05-31 13:32:44.067231648 +0200
@@ -225,7 +225,6 @@
 get(const cons<HT, TT>& c BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) {
   typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
       apply<cons<HT, TT> > impl;
-  typedef BOOST_DEDUCED_TYPENAME impl::type cons_element;
   return impl::call(c).head;
 }
 
diff --git a/external/boost/boost.unordered.Wshadow.warnings.patch b/external/boost/boost.unordered.Wshadow.warnings.patch
deleted file mode 100644
index ca93da7..0000000
--- a/external/boost/boost.unordered.Wshadow.warnings.patch
+++ /dev/null
@@ -1,146 +0,0 @@
--- foo/foo/foo/boost/unordered/detail/equivalent.hpp
+++ foo/foo/foo/boost/unordered/detail/equivalent.hpp
@@ -536,9 +536,9 @@
             node_pointer first_node = static_cast<node_pointer>(prev->next_);
             link_pointer end = first_node->group_prev_->next_;
 
-            std::size_t count = this->delete_nodes(prev, end);
+            std::size_t count_lcl = this->delete_nodes(prev, end);
             this->fix_bucket(bucket_index, prev);
-            return count;
+            return count_lcl;
         }
 
         iterator erase(c_iterator r)
@@ -557,21 +557,21 @@
             return iterator(r2.node_);
         }
 
-        link_pointer erase_nodes(node_pointer begin, node_pointer end)
+        link_pointer erase_nodes(node_pointer begin_arg, node_pointer end)
         {
-            std::size_t bucket_index = this->hash_to_bucket(begin->hash_);
+            std::size_t bucket_index = this->hash_to_bucket(begin_arg->hash_);
 
-            // Split the groups containing 'begin' and 'end'.
-            // And get the pointer to the node before begin while
+            // Split the groups containing 'begin_arg' and 'end.'
+            // And get the pointer to the node before begin_arg while
             // we're at it.
-            link_pointer prev = split_groups(begin, end);
+            link_pointer prev = split_groups(begin_arg, end);
 
-            // If we don't have a 'prev' it means that begin is at the
+            // If we don't have a 'prev' it means that begin_arg is at the
             // beginning of a block, so search through the blocks in the
             // same bucket.
             if (!prev) {
                 prev = this->get_previous_start(bucket_index);
-                while (prev->next_ != begin)
+                while (prev->next_ != begin_arg)
                     prev = static_cast<node_pointer>(prev->next_)->group_prev_;
             }
 
@@ -586,27 +586,27 @@
             return prev;
         }
 
-        static link_pointer split_groups(node_pointer begin, node_pointer end)
+        static link_pointer split_groups(node_pointer begin_arg, node_pointer end)
         {
-            node_pointer prev = begin->group_prev_;
-            if (prev->next_ != begin) prev = node_pointer();
+            node_pointer prev = begin_arg->group_prev_;
+            if (prev->next_ != begin_arg) prev = node_pointer();
 
             if (end) {
                 node_pointer first = end;
-                while (first != begin && first->group_prev_->next_ == first) {
+                while (first != begin_arg && first->group_prev_->next_ == first) {
                     first = first->group_prev_;
                 }
 
                 boost::swap(first->group_prev_, end->group_prev_);
-                if (first == begin) return prev;
+                if (first == begin_arg) return prev;
             }
 
             if (prev) {
                 node_pointer first = prev;
                 while (first->group_prev_->next_ == first) {
                     first = first->group_prev_;
                 }
-                boost::swap(first->group_prev_, begin->group_prev_);
+                boost::swap(first->group_prev_, begin_arg->group_prev_);
             }
 
             return prev;
--- foo/foo/foo/boost/unordered/detail/table.hpp
+++ foo/foo/foo/boost/unordered/detail/table.hpp
@@ -256,9 +256,9 @@
             return prev ? iterator(prev->next_) : iterator();
         }
         
-        std::size_t hash_to_bucket(std::size_t hash) const
+        std::size_t hash_to_bucket(std::size_t hash_arg) const
         {
-            return policy::to_bucket(bucket_count_, hash);
+            return policy::to_bucket(bucket_count_, hash_arg);
         }
 
         float load_factor() const
@@ -655,8 +655,8 @@
             // assign_nodes takes ownership of the container's elements,
             // assigning to them if possible, and deleting any that are
             // left over.
-            assign_nodes<table> assign(*this);
-            table_impl::fill_buckets(x.begin(), *this, assign);
+            assign_nodes<table> assign_lcl(*this);
+            table_impl::fill_buckets(x.begin(), *this, assign_lcl);
         }
 
         void assign(table const& x, true_type)
@@ -732,9 +732,9 @@
                 // move_assign_nodes takes ownership of the container's
                 // elements, assigning to them if possible, and deleting
                 // any that are left over.
-                move_assign_nodes<table> assign(*this);
+                move_assign_nodes<table> assign_lcl(*this);
                 node_holder<node_allocator> nodes(x);
-                table_impl::fill_buckets(nodes.begin(), *this, assign);
+                table_impl::fill_buckets(nodes.begin(), *this, assign_lcl);
             }
         }
         
--- foo/foo/foo/boost/unordered/detail/unique.hpp
+++ foo/foo/foo/boost/unordered/detail/unique.hpp
@@ -531,9 +531,9 @@
 
             link_pointer end = static_cast<node_pointer>(prev->next_)->next_;
 
-            std::size_t count = this->delete_nodes(prev, end);
+            std::size_t count_lcl = this->delete_nodes(prev, end);
             this->fix_bucket(bucket_index, prev);
-            return count;
+            return count_lcl;
         }
 
         iterator erase(c_iterator r)
@@ -552,13 +552,13 @@
             return iterator(r2.node_);
         }
 
-        void erase_nodes(node_pointer begin, node_pointer end)
+        void erase_nodes(node_pointer begin_arg, node_pointer end)
         {
-            std::size_t bucket_index = this->hash_to_bucket(begin->hash_);
+            std::size_t bucket_index = this->hash_to_bucket(begin_arg->hash_);
 
-            // Find the node before begin.
+            // Find the node before begin_arg.
             link_pointer prev = this->get_previous_start(bucket_index);
-            while(prev->next_ != begin) prev = prev->next_;
+            while(prev->next_ != begin_arg) prev = prev->next_;
 
             // Delete the nodes.
             do {
diff --git a/external/boost/boost.uuid.Wshadow.warnings.patch b/external/boost/boost.uuid.Wshadow.warnings.patch
deleted file mode 100644
index b9296dc..0000000
--- a/external/boost/boost.uuid.Wshadow.warnings.patch
+++ /dev/null
@@ -1,24 +0,0 @@
--- misc/boost_1_44_0/boost/uuid/uuid_io.hpp
+++ misc/build/boost_1_44_0/boost/uuid/uuid_io.hpp
@@ -59,7 +59,7 @@
         }
         
         if (flags & std::ios_base::left) {
-            for (std::streamsize i=uuid_width; i<width; i++) {
+            for (std::streamsize s=uuid_width; s<width; ++s) {
                 os << fill;
             }
         }
--- misc/boost_1_44_0/boost/uuid/name_generator.hpp
+++ misc/build/boost_1_44_0/boost/uuid/name_generator.hpp
@@ -30,8 +30,8 @@
 public:
     typedef uuid result_type;
 
-    explicit name_generator(uuid const& namespace_uuid)
-        : namespace_uuid(namespace_uuid)
+    explicit name_generator(uuid const& namespace_uuid_)
+        : namespace_uuid(namespace_uuid_)
     {}
 
     uuid operator()(const char* name) {
diff --git a/external/boost/boost.vc2012.patch b/external/boost/boost.vc2012.patch
deleted file mode 100644
index ac20699..0000000
--- a/external/boost/boost.vc2012.patch
+++ /dev/null
@@ -1,25 +0,0 @@
--- misc/build/boost_1_44_0/boost/config/compiler/visualc.hpp
+++ misc/build/boost_1_44_0/boost/config/compiler/visualc.hpp
@@ -101,6 +101,11 @@
 #  define BOOST_NO_ADL_BARRIER
 #endif
 
+#if _MSC_VER >= 1700  // 1700 == VC++ 11.0
+   // Removed in VC11:
+#  define BOOST_NO_0X_HDR_INITIALIZER_LIST
+#endif
+
 
 #if (_MSC_VER <= 1600)
 // MSVC (including the latest checked version) has not yet completely 
@@ -269,8 +269,8 @@
 #error "Compiler not supported or configured - please reconfigure"
 #endif
 //
-// last known and checked version is 1600 (VC10, aka 2010):
-#if (_MSC_VER > 1600)
+// last known and checked version is 1700 (VC12, aka 2012):
+#if (_MSC_VER > 1700)
 #  if defined(BOOST_ASSERT_CONFIG)
 #     error "Unknown compiler version - please run the configure tests and report the results"
 #  else
diff --git a/external/boost/boost.wdeprecated-auto_ptr.patch.0 b/external/boost/boost.wdeprecated-auto_ptr.patch.0
index b92d773..860840d 100644
--- a/external/boost/boost.wdeprecated-auto_ptr.patch.0
+++ b/external/boost/boost.wdeprecated-auto_ptr.patch.0
@@ -1,28 +1,6 @@
--- boost/ptr_container/ptr_map.hpp
+++ boost/ptr_container/ptr_map.hpp
@@ -16,6 +16,11 @@
 # pragma once
 #endif
 
+#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 406) || defined(__clang__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
 #include <map>
 #include <boost/ptr_container/ptr_map_adapter.hpp>
 
@@ -162,4 +168,8 @@
 
 }
 
+#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 406) || defined(__clang__)
+# pragma GCC diagnostic pop
+#endif
+
 #endif
--- boost/ptr_container/ptr_map_adapter.hpp
+++ boost/ptr_container/ptr_map_adapter.hpp
diff -ru boost.orig/boost/ptr_container/ptr_map_adapter.hpp boost/boost/ptr_container/ptr_map_adapter.hpp
--- boost/ptr_container/ptr_map_adapter.hpp	2015-07-18 22:42:11.723941110 +0200
+++ boost/ptr_container/ptr_map_adapter.hpp	2015-07-18 22:45:56.525938583 +0200
@@ -16,6 +16,11 @@
 # pragma once
 #endif
@@ -35,7 +13,7 @@
 #include <boost/ptr_container/detail/map_iterator.hpp>
 #include <boost/ptr_container/detail/associative_ptr_container.hpp>
 #include <boost/ptr_container/detail/meta_functions.hpp>
@@ -876,4 +876,8 @@
@@ -872,4 +877,8 @@
     
 } // namespace 'boost'  
 
@@ -44,8 +22,9 @@
+#endif
+
 #endif
--- boost/ptr_container/ptr_set_adapter.hpp
+++ boost/ptr_container/ptr_set_adapter.hpp
diff -ru boost.orig/boost/ptr_container/ptr_map.hpp boost/boost/ptr_container/ptr_map.hpp
--- boost/ptr_container/ptr_map.hpp	2015-01-25 20:27:11.000000000 +0100
+++ boost/ptr_container/ptr_map.hpp	2015-07-18 22:44:51.669939312 +0200
@@ -16,6 +16,11 @@
 # pragma once
 #endif
@@ -55,20 +34,21 @@
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
 #include <boost/ptr_container/detail/associative_ptr_container.hpp>
 #include <boost/ptr_container/detail/meta_functions.hpp>
 #include <boost/ptr_container/detail/void_ptr_iterator.hpp>
@@ -693,4 +693,8 @@
 #include <map>
 #include <boost/ptr_container/ptr_map_adapter.hpp>
 
 } // namespace 'boost'  
@@ -162,4 +167,8 @@
 
 }
 
+#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 406) || defined(__clang__)
+# pragma GCC diagnostic pop
+#endif
+
 #endif
--- boost/ptr_container/ptr_sequence_adapter.hpp
+++ boost/ptr_container/ptr_sequence_adapter.hpp
diff -ru boost.orig/boost/ptr_container/ptr_sequence_adapter.hpp boost/boost/ptr_container/ptr_sequence_adapter.hpp
--- boost/ptr_container/ptr_sequence_adapter.hpp	2015-07-18 22:42:11.734941110 +0200
+++ boost/boost/ptr_container/ptr_sequence_adapter.hpp	2015-07-18 22:47:28.662937548 +0200
@@ -16,6 +16,10 @@
 # pragma once
 #endif
@@ -89,8 +69,33 @@
+#endif
+
 #endif
--- boost/ptr_container/ptr_vector.hpp
+++ boost/ptr_container/ptr_vector.hpp
diff -ru boost.orig/boost/ptr_container/ptr_set_adapter.hpp boost/boost/ptr_container/ptr_set_adapter.hpp
--- boost/ptr_container/ptr_set_adapter.hpp	2015-01-25 20:27:11.000000000 +0100
+++ boost/ptr_container/ptr_set_adapter.hpp	2015-07-18 22:46:40.378938090 +0200
@@ -16,6 +16,11 @@
 # pragma once
 #endif
 
+#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 406) || defined(__clang__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
 #include <boost/ptr_container/detail/associative_ptr_container.hpp>
 #include <boost/ptr_container/detail/meta_functions.hpp>
 #include <boost/ptr_container/detail/void_ptr_iterator.hpp>
@@ -689,4 +694,8 @@
 
 } // namespace 'boost'  
 
+#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 406) || defined(__clang__)
+# pragma GCC diagnostic pop
+#endif
+
 #endif
diff -ru boost.orig/boost/ptr_container/ptr_vector.hpp boost/boost/ptr_container/ptr_vector.hpp
--- boost/ptr_container/ptr_vector.hpp	2015-01-25 20:27:11.000000000 +0100
+++ boost/ptr_container/ptr_vector.hpp	2015-07-18 22:48:11.431937067 +0200
@@ -16,6 +16,11 @@
 # pragma once
 #endif
@@ -103,7 +108,7 @@
 #include <vector>
 #include <boost/ptr_container/ptr_sequence_adapter.hpp>
 
@@ -74,4 +80,8 @@
@@ -74,4 +79,8 @@
     
 }
 
@@ -112,8 +117,9 @@
+#endif
+
 #endif
--- boost/smart_ptr/detail/shared_count.hpp
+++ boost/smart_ptr/detail/shared_count.hpp
diff -ru boost.orig/boost/smart_ptr/detail/shared_count.hpp boost/boost/smart_ptr/detail/shared_count.hpp
--- boost/smart_ptr/detail/shared_count.hpp	2015-06-06 00:40:42.000000000 +0200
+++ boost/smart_ptr/detail/shared_count.hpp	2015-07-18 22:49:13.985936364 +0200
@@ -18,6 +18,11 @@
 // http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -126,7 +132,7 @@
 #ifdef __BORLANDC__
 # pragma warn -8027     // Functions containing try are not expanded inline
 #endif
@@ -604,4 +604,8 @@
@@ -696,4 +701,8 @@
 # pragma warn .8027     // Functions containing try are not expanded inline
 #endif
 
@@ -135,8 +141,9 @@
+#endif
+
 #endif  // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED
--- boost/smart_ptr/scoped_ptr.hpp
+++ boost/smart_ptr/scoped_ptr.hpp
diff -ru boost.orig/boost/smart_ptr/scoped_ptr.hpp boost/boost/smart_ptr/scoped_ptr.hpp
--- boost/smart_ptr/scoped_ptr.hpp	2015-06-06 00:40:42.000000000 +0200
+++ boost/smart_ptr/scoped_ptr.hpp	2015-07-18 22:50:07.597935761 +0200
@@ -11,6 +11,11 @@
 //  http://www.boost.org/libs/smart_ptr/scoped_ptr.htm
 //
@@ -149,7 +156,7 @@
 #include <boost/config.hpp>
 #include <boost/assert.hpp>
 #include <boost/checked_delete.hpp>
@@ -158,4 +158,8 @@
@@ -154,4 +159,8 @@
 
 } // namespace boost
 
@@ -158,8 +165,9 @@
+#endif
+
 #endif // #ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED
--- boost/smart_ptr/shared_ptr.hpp
+++ boost/smart_ptr/shared_ptr.hpp
diff -ru boost.orig/boost/smart_ptr/shared_ptr.hpp boost/boost/smart_ptr/shared_ptr.hpp
--- boost/smart_ptr/shared_ptr.hpp	2015-06-06 00:40:42.000000000 +0200
+++ boost/smart_ptr/shared_ptr.hpp	2015-07-18 22:50:59.615935177 +0200
@@ -14,6 +14,11 @@
 //  See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation.
 //
@@ -171,10 +179,10 @@
+
 #include <boost/config.hpp>   // for broken compiler workarounds
 
 #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
@@ -1036,4 +1036,8 @@
 // In order to avoid circular dependencies with Boost.TR1
@@ -1064,4 +1069,8 @@
 
 #endif  // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
 } // namespace boost
 
+#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 406) || defined(__clang__)
+# pragma GCC diagnostic pop
diff --git a/external/boost/boost.windows.patch b/external/boost/boost.windows.patch
deleted file mode 100644
index befc805..0000000
--- a/external/boost/boost.windows.patch
+++ /dev/null
@@ -1,12 +0,0 @@
--- misc/build/boost_1_44_0/boost/pool/detail/mutex.hpp
+++ misc/build/boost_1_44_0/boost/pool/detail/mutex.hpp
@@ -45,7 +45,9 @@
 
 #ifndef BOOST_NO_MT
 # ifdef BOOST_WINDOWS
+#  define NOMINMAX
 #  include <windows.h>
+#  undef NOMINMAX
 # endif
 # if defined(_POSIX_THREADS) || defined(BOOST_HAS_PTHREADS)
 #  include <pthread.h>
diff --git a/external/boost/boost_1_44_0-unused-parameters.patch b/external/boost/boost_1_44_0-unused-parameters.patch
index 4fe61ba..d3341bf 100644
--- a/external/boost/boost_1_44_0-unused-parameters.patch
+++ b/external/boost/boost_1_44_0-unused-parameters.patch
@@ -1,6 +1,7 @@
--- misc/boost_1_44_0/boost/bind/bind.hpp	2009-11-30 21:30:22.000000000 +0100
+++ misc/build/boost_1_44_0/boost/bind/bind.hpp	2012-01-20 12:44:07.111316403 +0100
@@ -143,7 +143,7 @@
diff -ru boost.orig/boost/bind/bind.hpp boost/boost/bind/bind.hpp
--- foo/misc/boost.orig/boost/bind/bind.hpp	2015-05-04 00:08:08.000000000 +0200
+++ foo/misc/boost/boost/bind/bind.hpp	2015-07-16 22:47:55.972950054 +0200
@@ -145,7 +145,7 @@
 
 template<class F> struct unwrapper
 {
@@ -9,7 +10,7 @@
     {
         return f;
     }
@@ -226,7 +226,7 @@
@@ -228,7 +228,7 @@
 
     A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
 
@@ -18,7 +19,7 @@
 
     template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
 
@@ -238,22 +238,22 @@
@@ -240,22 +240,22 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
@@ -45,9 +46,14 @@
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
     }
@@ -285,8 +285,8 @@
     A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
     A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
@@ -284,11 +284,11 @@
 
     list2( A1 a1, A2 a2 ): base_type( a1, a2 ) {}
 
-    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2>) const { return base_type::a2_; }
 
-    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
@@ -56,7 +62,7 @@
 
     template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
 
@@ -298,22 +298,22 @@
@@ -300,42 +300,42 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
@@ -83,7 +89,52 @@
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
     }
@@ -377,7 +377,7 @@
 
-    template<class A> bool operator()( type<bool>, logical_and & /*f*/, A & a, int )
+    template<class A> bool operator()( type<bool>, logical_and & /*f*/, A & a,  __attribute__ ((unused)) int )
     {
         return a[ base_type::a1_ ] && a[ base_type::a2_ ];
     }
 
-    template<class A> bool operator()( type<bool>, logical_and const & /*f*/, A & a, int ) const
+    template<class A> bool operator()( type<bool>, logical_and const & /*f*/, A & a,  __attribute__ ((unused)) int ) const
     {
         return a[ base_type::a1_ ] && a[ base_type::a2_ ];
     }
 
-    template<class A> bool operator()( type<bool>, logical_or & /*f*/, A & a, int )
+    template<class A> bool operator()( type<bool>, logical_or & /*f*/, A & a,  __attribute__ ((unused)) int )
     {
         return a[ base_type::a1_ ] || a[ base_type::a2_ ];
     }
 
-    template<class A> bool operator()( type<bool>, logical_or const & /*f*/, A & a, int ) const
+    template<class A> bool operator()( type<bool>, logical_or const & /*f*/, A & a,  __attribute__ ((unused)) int ) const
     {
         return a[ base_type::a1_ ] || a[ base_type::a2_ ];
     }
@@ -361,13 +361,13 @@
 
     list3( A1 a1, A2 a2, A3 a3 ): base_type( a1, a2, a3 ) {}
 
-    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
-
-    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3>) const { return base_type::a3_; }
+
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3> (*) ()) const { return base_type::a3_; }
 
     template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
 
@@ -379,22 +379,22 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
@@ -92,7 +143,10 @@
     {
         return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
     }
@@ -387,12 +387,12 @@
 
-    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, __attribute__ ((unused)) long) const
     {
         return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
     }
 
@@ -107,14 +161,24 @@
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
     }
@@ -427,10 +427,10 @@
     A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
     A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
@@ -424,15 +424,15 @@
 
     list4( A1 a1, A2 a2, A3 a3, A4 a4 ): base_type( a1, a2, a3, a4 ) {}
 
-    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
-
-    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4>) const { return base_type::a4_; }
+
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3> (*) ()) const { return base_type::a3_; }
@@ -122,7 +186,7 @@
 
     template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
 
@@ -442,7 +442,7 @@
@@ -444,22 +444,22 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
@@ -131,7 +195,10 @@
     {
         return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
     }
@@ -452,7 +452,7 @@
 
-    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, __attribute__ ((unused)) long) const
     {
         return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
     }
 
@@ -140,7 +207,30 @@
     {
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
     }
@@ -510,7 +510,7 @@
 
-    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, __attribute__ ((unused)) int) const
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
     }
@@ -490,11 +490,11 @@
 
     list5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): base_type( a1, a2, a3, a4, a5 ) {}
 
-    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5>) const { return base_type::a5_; }
 
     A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
     A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
@@ -512,12 +512,12 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
@@ -149,26 +239,285 @@
     {
         return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
     }
@@ -520,7 +520,7 @@
 
-    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, __attribute__ ((unused)) long) const
     {
         return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
     }
 
-    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    template<class F, class A> void operator()(type<void>, F & f, A & a, __attribute__ ((unused)) int)
     {
@@ -527,7 +527,7 @@
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
     }
@@ -591,7 +591,7 @@
 
-    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, __attribute__ ((unused)) int) const
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
     }
@@ -559,19 +559,19 @@
 
     list6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): base_type( a1, a2, a3, a4, a5, a6 ) {}
 
-    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
-    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
-
-    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
-    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5>) const { return base_type::a5_; }
+    A6 operator[] (__attribute__ ((unused)) boost::arg<6>) const { return base_type::a6_; }
+
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5> (*) ()) const { return base_type::a5_; }
+    A6 operator[] (__attribute__ ((unused)) boost::arg<6> (*) ()) const { return base_type::a6_; }
 
     template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
 
@@ -583,12 +583,12 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
-    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, __attribute__ ((unused)) long)
     {
         return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
     }
 
-    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, __attribute__ ((unused)) long) const
     {
         return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
     }
@@ -598,7 +598,7 @@
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
     }
 
-    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, __attribute__ ((unused)) int) const
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
     }
@@ -631,21 +631,21 @@
 
     list7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): base_type( a1, a2, a3, a4, a5, a6, a7 ) {}
 
-    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
-    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
-    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
-
-    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
-    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
-    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5>) const { return base_type::a5_; }
+    A6 operator[] (__attribute__ ((unused)) boost::arg<6>) const { return base_type::a6_; }
+    A7 operator[] (__attribute__ ((unused)) boost::arg<7>) const { return base_type::a7_; }
+
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5> (*) ()) const { return base_type::a5_; }
+    A6 operator[] (__attribute__ ((unused)) boost::arg<6> (*) ()) const { return base_type::a6_; }
+    A7 operator[] (__attribute__ ((unused)) boost::arg<7> (*) ()) const { return base_type::a7_; }
 
     template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
 
@@ -657,22 +657,22 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
-    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, __attribute__ ((unused)) long)
     {
         return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
     }
 
-    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, __attribute__ ((unused)) long) const
     {
         return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
     }
 
-    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    template<class F, class A> void operator()(type<void>, F & f, A & a, __attribute__ ((unused)) int)
     {
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
     }
--- misc/boost_1_44_0/boost/bind/mem_fn.hpp	2009-03-02 17:15:40.000000000 +0100
+++ misc/build/boost_1_44_0/boost/bind/mem_fn.hpp	2012-01-20 12:44:07.112316398 +0100
 
-    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, __attribute__ ((unused)) int) const
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
     }
@@ -706,23 +706,23 @@
 
     list8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
 
-    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
-    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
-    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
-    A8 operator[] (boost::arg<8>) const { return base_type::a8_; }
-
-    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
-    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
-    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
-    A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5>) const { return base_type::a5_; }
+    A6 operator[] (__attribute__ ((unused)) boost::arg<6>) const { return base_type::a6_; }
+    A7 operator[] (__attribute__ ((unused)) boost::arg<7>) const { return base_type::a7_; }
+    A8 operator[] (__attribute__ ((unused)) boost::arg<8>) const { return base_type::a8_; }
+
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5> (*) ()) const { return base_type::a5_; }
+    A6 operator[] (__attribute__ ((unused)) boost::arg<6> (*) ()) const { return base_type::a6_; }
+    A7 operator[] (__attribute__ ((unused)) boost::arg<7> (*) ()) const { return base_type::a7_; }
+    A8 operator[] (__attribute__ ((unused)) boost::arg<8> (*) ()) const { return base_type::a8_; }
 
     template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
 
@@ -734,22 +734,22 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
-    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, __attribute__ ((unused)) long)
     {
         return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
     }
 
-    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, __attribute__ ((unused)) long) const
     {
         return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
     }
 
-    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    template<class F, class A> void operator()(type<void>, F & f, A & a, __attribute__ ((unused)) int)
     {
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
     }
 
-    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, __attribute__ ((unused)) int) const
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
     }
@@ -784,25 +784,25 @@
 
     list9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) {}
 
-    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
-    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
-    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
-    A8 operator[] (boost::arg<8>) const { return base_type::a8_; }
-    A9 operator[] (boost::arg<9>) const { return base_type::a9_; }
-
-    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
-    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
-    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
-    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
-    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
-    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
-    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
-    A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }
-    A9 operator[] (boost::arg<9> (*) ()) const { return base_type::a9_; }
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5>) const { return base_type::a5_; }
+    A6 operator[] (__attribute__ ((unused)) boost::arg<6>) const { return base_type::a6_; }
+    A7 operator[] (__attribute__ ((unused)) boost::arg<7>) const { return base_type::a7_; }
+    A8 operator[] (__attribute__ ((unused)) boost::arg<8>) const { return base_type::a8_; }
+    A9 operator[] (__attribute__ ((unused)) boost::arg<9>) const { return base_type::a9_; }
+
+    A1 operator[] (__attribute__ ((unused)) boost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (__attribute__ ((unused)) boost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (__attribute__ ((unused)) boost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (__attribute__ ((unused)) boost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (__attribute__ ((unused)) boost::arg<5> (*) ()) const { return base_type::a5_; }
+    A6 operator[] (__attribute__ ((unused)) boost::arg<6> (*) ()) const { return base_type::a6_; }
+    A7 operator[] (__attribute__ ((unused)) boost::arg<7> (*) ()) const { return base_type::a7_; }
+    A8 operator[] (__attribute__ ((unused)) boost::arg<8> (*) ()) const { return base_type::a8_; }
+    A9 operator[] (__attribute__ ((unused)) boost::arg<9> (*) ()) const { return base_type::a9_; }
 
     template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
 
@@ -814,22 +814,22 @@
 
     template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 
-    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, __attribute__ ((unused)) long)
     {
         return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
     }
 
-    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, __attribute__ ((unused)) long) const
     {
         return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
     }
 
-    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    template<class F, class A> void operator()(type<void>, F & f, A & a, __attribute__ ((unused)) int)
     {
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
     }
 
-    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, __attribute__ ((unused)) int) const
     {
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
     }
diff -ru boost.orig/boost/bind/mem_fn.hpp boost/boost/bind/mem_fn.hpp
--- foo/misc/boost.orig/boost/bind/mem_fn.hpp	2015-05-04 00:08:08.000000000 +0200
+++ foo/misc/boost/boost/bind/mem_fn.hpp	2015-07-16 21:54:24.695986146 +0200
@@ -328,7 +328,7 @@
         return (u.*f_);
     }
@@ -178,8 +527,9 @@
     {
         return (get_pointer(u)->*f_);
     }
--- misc/boost_1_44_0/boost/bind/mem_fn_template.hpp	2009-12-03 18:44:37.000000000 +0100
+++ misc/build/boost_1_44_0/boost/bind/mem_fn_template.hpp	2012-01-20 12:44:07.112316398 +0100
diff -ru boost.orig/boost/bind/mem_fn_template.hpp boost/boost/bind/mem_fn_template.hpp
--- foo/misc/boost.orig/boost/bind/mem_fn_template.hpp	2015-05-04 00:08:08.000000000 +0200
+++ foo/misc/boost/boost/bind/mem_fn_template.hpp	2015-07-16 21:58:25.008983445 +0200
@@ -35,7 +35,7 @@
         BOOST_MEM_FN_RETURN (u.*f_)();
     }
@@ -231,15 +581,6 @@
     {
         BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
     }
@@ -330,7 +330,7 @@
         BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
     }
 
-    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
+    template<class U, class B1, class B2> R call(U & u, __attribute__ ((unused)) void const *, B1 & b1, B2 & b2) const
     {
         BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
     }
@@ -379,7 +379,7 @@
         BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
     }
@@ -267,9 +608,10 @@
     {
         BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
     }
--- misc/boost_1_44_0/boost/detail/dynamic_bitset.hpp	2008-10-21 20:13:59.000000000 +0200
+++ misc/build/boost_1_44_0/boost/detail/dynamic_bitset.hpp	2012-01-20 12:44:07.113316394 +0100
@@ -100,8 +100,8 @@
diff -ru boost.orig/boost/detail/dynamic_bitset.hpp boost/boost/detail/dynamic_bitset.hpp
--- foo/misc/boost.orig/boost/detail/dynamic_bitset.hpp	2015-06-04 07:43:44.000000000 +0200
+++ foo/misc/boost/boost/detail/dynamic_bitset.hpp	2015-07-16 21:59:20.786982818 +0200
@@ -104,8 +104,8 @@
 
      template <typename Iterator>
      inline std::size_t do_count(Iterator first, std::size_t length,
@@ -280,9 +622,10 @@
      {
          std::size_t num = 0;
          if (length)
--- misc/boost_1_44_0/boost/foreach.hpp	2010-07-30 22:26:40.000000000 +0200
+++ misc/build/boost_1_44_0/boost/foreach.hpp	2012-01-20 12:44:07.114316390 +0100
@@ -610,7 +610,7 @@
diff -ru boost.orig/boost/foreach.hpp boost/boost/foreach.hpp
--- foo/misc/boost.orig/boost/foreach.hpp	2015-03-04 21:36:38.000000000 +0100
+++ foo/misc/boost/boost/foreach.hpp	2015-07-16 22:01:53.617981100 +0200
@@ -633,7 +633,7 @@
 }
 
 template<typename T>
@@ -291,7 +634,7 @@
 {
     // Cannot seem to get sunpro to handle addressof() with array types.
     #if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570))
@@ -641,7 +641,7 @@
@@ -665,7 +665,7 @@
 
 template<typename T, typename C>
 inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
@@ -300,25 +643,7 @@
 {
     typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
     typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
@@ -678,7 +678,7 @@
 
 template<typename T, typename C>
 inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
-end(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
+end(auto_any_t col, __attribute__ ((unused)) type2type<T, C> *, __attribute__ ((unused)) boost::mpl::false_ *) // lvalue
 {
     typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
     typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
@@ -707,7 +707,7 @@
 // done
 //
 template<typename T, typename C>
-inline bool done(auto_any_t cur, auto_any_t end, type2type<T, C> *)
+inline bool done(auto_any_t cur, auto_any_t end, __attribute__ ((unused)) type2type<T, C> *)
 {
     typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
     return auto_any_cast<iter_t, boost::mpl::false_>(cur) == auto_any_cast<iter_t, boost::mpl::false_>(end);
@@ -725,7 +725,7 @@
@@ -754,7 +754,7 @@
 // next
 //
 template<typename T, typename C>
@@ -327,7 +652,7 @@
 {
     typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
     ++auto_any_cast<iter_t, boost::mpl::false_>(cur);
@@ -736,7 +736,7 @@
@@ -765,7 +765,7 @@
 //
 template<typename T, typename C>
 inline BOOST_DEDUCED_TYPENAME foreach_reference<T, C>::type
@@ -336,9 +661,19 @@
 {
     typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
     return *auto_any_cast<iter_t, boost::mpl::false_>(cur);
--- misc/boost_1_44_0/boost/function/function_template.hpp	2009-07-09 01:23:52.000000000 +0200
+++ misc/build/boost_1_44_0/boost/function/function_template.hpp	2012-01-20 15:29:25.217770399 +0100
@@ -711,7 +711,7 @@
@@ -784,7 +784,7 @@
 
 template<typename T, typename C>
 inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
-rbegin(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
+rbegin(auto_any_t col, __attribute__ ((unused)) type2type<T, C> *, __attribute__ ((unused))  boost::mpl::false_ *) // lvalue
 {
     typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
     typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iterator;
diff -ru boost.orig/boost/function/function_template.hpp boost/boost/function/function_template.hpp
--- foo/misc/boost.orig/boost/function/function_template.hpp	2015-01-18 18:32:44.000000000 +0100
+++ foo/misc/boost/boost/function/function_template.hpp	2015-07-16 22:03:43.157979869 +0200
@@ -717,7 +717,7 @@
     template<typename Functor>
     BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f
 #ifndef BOOST_NO_SFINAE
@@ -347,7 +682,7 @@
                             (boost::type_traits::ice_not<
                              (is_integral<Functor>::value)>::value),
                                         int>::type = 0
@@ -724,7 +724,7 @@
@@ -730,7 +730,7 @@
     template<typename Functor,typename Allocator>
     BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a
 #ifndef BOOST_NO_SFINAE
@@ -356,7 +691,7 @@
                             (boost::type_traits::ice_not<
                              (is_integral<Functor>::value)>::value),
                                         int>::type = 0
@@ -1055,7 +1055,7 @@
@@ -1068,7 +1068,7 @@
   template<typename Functor>
   function(Functor f
 #ifndef BOOST_NO_SFINAE
@@ -365,7 +700,7 @@
                             (boost::type_traits::ice_not<
                           (is_integral<Functor>::value)>::value),
                        int>::type = 0
@@ -1067,7 +1067,7 @@
@@ -1080,7 +1080,7 @@
   template<typename Functor,typename Allocator>
   function(Functor f, Allocator a
 #ifndef BOOST_NO_SFINAE
@@ -374,8 +709,9 @@
                             (boost::type_traits::ice_not<
                           (is_integral<Functor>::value)>::value),
                        int>::type = 0
--- misc/boost_1_44_0/boost/iterator/reverse_iterator.hpp	2004-08-12 19:13:07.000000000 +0200
+++ misc/build/boost_1_44_0/boost/iterator/reverse_iterator.hpp	2012-01-20 12:44:07.122316355 +0100
diff -ru boost.orig/boost/iterator/reverse_iterator.hpp boost/boost/iterator/reverse_iterator.hpp
--- foo/misc/boost.orig/boost/iterator/reverse_iterator.hpp	2014-09-06 19:18:28.000000000 +0200
+++ foo/misc/boost/boost/iterator/reverse_iterator.hpp	2015-07-16 22:04:18.012979478 +0200
@@ -34,7 +34,7 @@
       template<class OtherIterator>
       reverse_iterator(
@@ -385,9 +721,10 @@
           )
           : super_t(r.base())
       {}
--- misc/boost_1_44_0/boost/optional/optional.hpp	2012-01-20 15:24:32.364576113 +0100
+++ misc/build/boost_1_44_0/boost/optional/optional.hpp	2012-01-20 12:44:07.123316351 +0100
@@ -365,7 +365,7 @@
diff -ru boost.orig/boost/optional/optional.hpp boost/boost/optional/optional.hpp
--- foo/misc/boost.orig/boost/optional/optional.hpp	2015-07-09 00:01:02.000000000 +0200
+++ foo/misc/boost/boost/optional/optional.hpp	2015-07-16 22:06:21.657978088 +0200
@@ -634,7 +634,7 @@
     // Converting constructions of optional<T> from optional<U> uses this function with
     // 'Expr' being of type 'U' and relying on a converting constructor of T from U.
     template<class Expr>
@@ -396,7 +733,7 @@
      {
        new (m_storage.address()) internal_type(expr) ;
        m_initialized = true ;
@@ -376,7 +376,7 @@
@@ -645,7 +645,7 @@
     // Converting assignments of optional<T> from optional<U> uses this function with
     // 'Expr' being of type 'U' and relying on a converting assignment of T from U.
     template<class Expr>
@@ -405,13 +742,13 @@
      {
        assign_value(expr, is_reference_predicate());
      }
@@ -846,12 +846,12 @@
@@ -1424,17 +1424,17 @@
 
 template<class T>
 inline
-bool operator == ( none_t , optional<T> const& y )
+bool operator == ( __attribute__ ((unused)) none_t , optional<T> const& y )
 { return equal_pointees(optional<T>() ,y); }
-bool operator == ( none_t , optional<T> const& y ) BOOST_NOEXCEPT
+bool operator == ( __attribute__ ((unused)) none_t , optional<T> const& y ) BOOST_NOEXCEPT
 { return !y; }
 
 template<class T>
 inline
@@ -420,8 +757,39 @@
 { return less_pointees(optional<T>() ,y); }
 
 template<class T>
--- misc/boost_1_44_0/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp	2012-01-20 12:44:07.124316347 +0100
 inline
-bool operator != ( none_t, optional<T> const& y ) BOOST_NOEXCEPT
+bool operator != ( __attribute__ ((unused)) none_t, optional<T> const& y ) BOOST_NOEXCEPT
 { return bool(y); }
 
 template<class T>
diff -ru boost.orig/boost/ptr_container/detail/default_deleter.hpp boost/boost/ptr_container/detail/default_deleter.hpp
--- foo/misc/boost.orig/boost/ptr_container/detail/default_deleter.hpp	2015-01-25 20:27:11.000000000 +0100
+++ foo/misc/boost/boost/ptr_container/detail/default_deleter.hpp	2015-07-16 22:45:54.427951420 +0200
@@ -61,7 +61,7 @@
 { 
     default_deleter() { }
     template<typename TT>
-    default_deleter(default_deleter<TT> tt) { }
+    default_deleter(__attribute__ ((unused)) default_deleter<TT> tt) { }
 };
 
 } } } // End namespaces ptr_container_detail, move_ptrs, boost.
diff -ru boost.orig/boost/ptr_container/ptr_sequence_adapter.hpp boost/boost/ptr_container/ptr_sequence_adapter.hpp
--- foo/misc/boost.orig/boost/ptr_container/ptr_sequence_adapter.hpp	2015-07-16 08:47:41.786947347 +0200
+++ foo/misc/boost/boost/ptr_container/ptr_sequence_adapter.hpp	2015-07-16 22:46:28.137951041 +0200
@@ -664,7 +664,7 @@
             
         }
 
-        void range_check_impl( iterator first, iterator last, 
+        void range_check_impl( __attribute__ ((unused)) iterator first, __attribute__ ((unused)) iterator last, 
                                std::bidirectional_iterator_tag )
         { /* do nothing */ }
 
diff -ru boost.orig/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp boost/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp	2015-07-16 22:07:32.910977287 +0200
@@ -63,8 +63,8 @@
 
         template<typename IteratorT>
@@ -433,25 +801,9 @@
             ) const
         {
             this->act(ref,value_ref); // defined in ActionT
--- misc/boost_1_44_0/boost/spirit/home/classic/core/composite/no_actions.hpp
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/composite/no_actions.hpp
@@ -38,10 +38,10 @@
     template<typename ActorT, typename AttrT, typename IteratorT>
     void
     do_action(
-        ActorT const&       actor,
-        AttrT&              val,
-        IteratorT const&    first,
-        IteratorT const&    last) const
+        __attribute__ ((unused)) ActorT const&       actor,
+        __attribute__ ((unused)) AttrT&              val,
+        __attribute__ ((unused)) IteratorT const&    first,
+        __attribute__ ((unused)) IteratorT const&    last) const
     {}
 };
 
--- misc/boost_1_44_0/boost/spirit/home/classic/core/composite/impl/directives.ipp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/composite/impl/directives.ipp	2012-01-20 12:44:07.124316347 +0100
diff -ru boost.orig/boost/spirit/home/classic/core/composite/impl/directives.ipp boost/boost/spirit/home/classic/core/composite/impl/directives.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/composite/impl/directives.ipp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/composite/impl/directives.ipp	2015-07-16 22:12:36.614973874 +0200
@@ -41,7 +41,7 @@
         contiguous_parser_parse(
             ST const& s,
@@ -488,9 +840,28 @@
         {
             typedef scanner_policies<
                 inhibit_case_iteration_policy<
--- misc/boost_1_44_0/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
@@ -83,7 +83,7 @@
diff -ru boost.orig/boost/spirit/home/classic/core/composite/no_actions.hpp boost/boost/spirit/home/classic/core/composite/no_actions.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/composite/no_actions.hpp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/composite/no_actions.hpp	2015-07-16 22:08:22.699976727 +0200
@@ -38,10 +38,10 @@
     template<typename ActorT, typename AttrT, typename IteratorT>
     void
     do_action(
-        ActorT const&       actor,
-        AttrT&              val,
-        IteratorT const&    first,
-        IteratorT const&    last) const
+        __attribute__ ((unused)) ActorT const&       actor,
+        __attribute__ ((unused)) AttrT&              val,
+        __attribute__ ((unused)) IteratorT const&    first,
+        __attribute__ ((unused)) IteratorT const&    last) const
     {}
 };
 
diff -ru boost.orig/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp	2015-07-16 22:13:57.708972962 +0200
@@ -69,7 +69,7 @@
         {   // Does _not_ copy the helpers member !
         }
 
@@ -499,8 +870,9 @@
         {   // Does _not_ copy the helpers member !
             return *this;
         }
--- misc/boost_1_44_0/boost/spirit/home/classic/core/non_terminal/parser_context.hpp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/non_terminal/parser_context.hpp	2012-01-20 12:44:07.124316347 +0100
diff -ru boost.orig/boost/spirit/home/classic/core/non_terminal/parser_context.hpp boost/boost/spirit/home/classic/core/non_terminal/parser_context.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/non_terminal/parser_context.hpp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/non_terminal/parser_context.hpp	2015-07-16 22:17:08.977970813 +0200
@@ -51,15 +51,15 @@
         typedef parser_context_linker<parser_context<AttrT> > context_linker_t;
 
@@ -516,13 +888,14 @@
         template <typename ResultT, typename ParserT, typename ScannerT>
         ResultT&
-        post_parse(ResultT& hit, ParserT const&, ScannerT const&)
+        post_parse(ResultT& hit, __attribute__ ((unused)) ParserT const&, __attribute__ ((unused)) ScannerT const&)
+        post_parse(__attribute__ ((unused)) ResultT& hit, __attribute__ ((unused)) ParserT const&, __attribute__ ((unused)) ScannerT const&)
         { return hit; }
     };
 
--- misc/boost_1_44_0/boost/spirit/home/classic/core/primitives/impl/numerics.ipp	2012-01-20 15:24:32.364576113 +0100
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/primitives/impl/numerics.ipp	2012-01-20 12:44:07.125316343 +0100
@@ -240,7 +240,7 @@
diff -ru boost.orig/boost/spirit/home/classic/core/primitives/impl/numerics.ipp boost/boost/spirit/home/classic/core/primitives/impl/numerics.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/primitives/impl/numerics.ipp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/primitives/impl/numerics.ipp	2015-07-16 22:17:53.303970314 +0200
@@ -226,7 +226,7 @@
         }
 
         template <>
@@ -531,8 +904,9 @@
         {
             return true;
         }
--- misc/boost_1_44_0/boost/spirit/home/classic/core/primitives/primitives.hpp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/primitives/primitives.hpp	2012-01-20 12:44:07.125316343 +0100
diff -ru boost.orig/boost/spirit/home/classic/core/primitives/primitives.hpp boost/boost/spirit/home/classic/core/primitives/primitives.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/primitives/primitives.hpp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/primitives/primitives.hpp	2015-07-16 22:18:27.942969925 +0200
@@ -316,7 +316,7 @@
         anychar_parser() {}
 
@@ -542,8 +916,9 @@
         {
             return true;
         }
--- misc/boost_1_44_0/boost/spirit/home/classic/core/scanner/impl/skipper.ipp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/scanner/impl/skipper.ipp	2012-01-20 12:44:07.125316343 +0100
diff -ru boost.orig/boost/spirit/home/classic/core/scanner/impl/skipper.ipp boost/boost/spirit/home/classic/core/scanner/impl/skipper.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/scanner/impl/skipper.ipp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/scanner/impl/skipper.ipp	2015-07-16 22:19:06.409969493 +0200
@@ -122,7 +122,7 @@
                 IteratorT const&    first_,
                 IteratorT const&    last,
@@ -553,8 +928,9 @@
             {
                 typedef skipper_iteration_policy<> iter_policy_t;
                 typedef scanner_policies<iter_policy_t> scanner_policies_t;
--- misc/boost_1_44_0/boost/spirit/home/classic/core/scanner/scanner.hpp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/scanner/scanner.hpp	2012-01-20 12:44:07.126316338 +0100
diff -ru boost.orig/boost/spirit/home/classic/core/scanner/scanner.hpp boost/boost/spirit/home/classic/core/scanner/scanner.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/scanner/scanner.hpp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/scanner/scanner.hpp	2015-07-16 22:20:18.232968685 +0200
@@ -82,18 +82,18 @@
         create_match(
             std::size_t         length,
@@ -591,8 +967,9 @@
         {
             actor(val);
         }
--- misc/boost_1_44_0/boost/spirit/home/classic/core/scanner/skipper.hpp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/core/scanner/skipper.hpp	2012-01-20 12:44:07.126316338 +0100
diff -ru boost.orig/boost/spirit/home/classic/core/scanner/skipper.hpp boost/boost/spirit/home/classic/core/scanner/skipper.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/core/scanner/skipper.hpp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/core/scanner/skipper.hpp	2015-07-16 22:20:47.695968354 +0200
@@ -82,7 +82,7 @@
 
         template <typename ScannerT>
@@ -602,8 +979,9 @@
     };
 
     ///////////////////////////////////////////////////////////////////////////
--- misc/boost_1_44_0/boost/spirit/home/classic/meta/impl/refactoring.ipp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/meta/impl/refactoring.ipp	2012-01-20 12:44:07.126316338 +0100
diff -ru boost.orig/boost/spirit/home/classic/meta/impl/refactoring.ipp boost/boost/spirit/home/classic/meta/impl/refactoring.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/meta/impl/refactoring.ipp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/meta/impl/refactoring.ipp	2015-07-16 22:23:33.840966487 +0200
@@ -92,7 +92,7 @@
 
         template <typename ParserT, typename ScannerT, typename BinaryT>
@@ -640,38 +1018,52 @@
         {
             return action.parse(scan);
         }
--- misc/boost_1_44_0/boost/spirit/home/classic/utility/impl/chset.ipp
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/utility/impl/chset.ipp
@@ -129,7 +129,7 @@
diff -ru boost.orig/boost/spirit/home/classic/phoenix/tuples.hpp boost/boost/spirit/home/classic/phoenix/tuples.hpp
--- foo/misc/boost.orig/boost/spirit/home/classic/phoenix/tuples.hpp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/phoenix/tuples.hpp	2015-07-16 22:35:37.780958351 +0200
@@ -207,7 +207,7 @@
     typedef nil_t& rtype;
     typedef nil_t const& crtype;
 
-    static nil_t    get(TupleT const& t)    { return nil_t(); }
+    static nil_t    get(__attribute__ ((unused)) TupleT const& t)    { return nil_t(); }
 };
 
 //////////////////////////////////
diff -ru boost.orig/boost/spirit/home/classic/utility/impl/chset.ipp boost/boost/spirit/home/classic/utility/impl/chset.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/utility/impl/chset.ipp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/utility/impl/chset.ipp	2015-07-16 22:29:45.156962314 +0200
@@ -97,7 +97,7 @@
 }
 
 template <typename CharT>
-inline chset<CharT>::chset(nothing_parser arg_)
+inline chset<CharT>::chset(__attribute__ ((unused)) nothing_parser arg_)
-inline chset<CharT>::chset(nothing_parser /*arg_*/)
+inline chset<CharT>::chset(__attribute__ ((unused)) nothing_parser /*arg_*/)
 : ptr(new basic_chset<CharT>()) {}
 
 template <typename CharT>
@@ -182,7 +182,7 @@
@@ -146,7 +146,7 @@
 
 template <typename CharT>
 inline chset<CharT>&
-chset<CharT>::operator=(anychar_parser rhs)
+chset<CharT>::operator=(__attribute__ ((unused)) anychar_parser rhs)
-chset<CharT>::operator=(anychar_parser /*rhs*/)
+chset<CharT>::operator=(__attribute__ ((unused)) anychar_parser /*rhs*/)
 {
     utility::impl::detach_clear(ptr);
     ptr->set(
@@ -194,7 +194,7 @@
@@ -158,7 +158,7 @@
 
 template <typename CharT>
 inline chset<CharT>&
-chset<CharT>::operator=(nothing_parser rhs)
+chset<CharT>::operator=(__attribute__ ((unused)) nothing_parser rhs)
-chset<CharT>::operator=(nothing_parser /*rhs*/)
+chset<CharT>::operator=(__attribute__ ((unused)) nothing_parser /*rhs*/)
 {
     utility::impl::detach_clear(ptr);
     return *this;
--- misc/boost_1_44_0/boost/spirit/home/classic/utility/impl/chset_operators.ipp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/utility/impl/chset_operators.ipp	2012-01-20 12:44:07.127316333 +0100
@@ -576,7 +576,7 @@
diff -ru boost.orig/boost/spirit/home/classic/utility/impl/chset_operators.ipp boost/boost/spirit/home/classic/utility/impl/chset_operators.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/utility/impl/chset_operators.ipp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/utility/impl/chset_operators.ipp	2015-07-16 22:31:03.363961435 +0200
@@ -502,7 +502,7 @@
 //////////////////////////////////
 template <typename CharT>
 inline chset<CharT>
@@ -680,8 +1072,9 @@
 {
     return ~b;
 }
--- misc/boost_1_44_0/boost/spirit/home/classic/utility/impl/lists.ipp	2008-06-22 17:05:38.000000000 +0200
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/utility/impl/lists.ipp	2012-01-20 12:44:07.127316333 +0100
diff -ru boost.orig/boost/spirit/home/classic/utility/impl/lists.ipp boost/boost/spirit/home/classic/utility/impl/lists.ipp
--- foo/misc/boost.orig/boost/spirit/home/classic/utility/impl/lists.ipp	2015-05-17 14:17:51.000000000 +0200
+++ foo/misc/boost/boost/spirit/home/classic/utility/impl/lists.ipp	2015-07-16 22:34:55.728958823 +0200
@@ -64,8 +64,8 @@
             typename ItemT, typename DelimT
         >
@@ -704,42 +1097,34 @@
         {
             return (
                     (item - delim)
--- misc/boost_1_44_0/boost/spirit/home/classic/phoenix/tuples.hpp
+++ misc/build/boost_1_44_0/boost/spirit/home/classic/phoenix/tuples.hpp
@@ -211,7 +211,7 @@
     typedef nil_t& rtype;
     typedef nil_t const& crtype;
 
-    static nil_t    get(TupleT const& t)    { return nil_t(); }
+    static nil_t    get(__attribute__ ((unused)) TupleT const& t)    { return nil_t(); }
 };
 
 //////////////////////////////////
--- misc/boost_1_44_0/boost/throw_exception.hpp	2010-07-03 23:32:02.000000000 +0200
+++ misc/build/boost_1_44_0/boost/throw_exception.hpp	2012-01-20 12:44:07.127316333 +0100
@@ -49,7 +49,7 @@
diff -ru boost.orig/boost/throw_exception.hpp boost/boost/throw_exception.hpp
--- foo/misc/boost.orig/boost/throw_exception.hpp	2014-06-08 22:17:48.000000000 +0200
+++ foo/misc/boost/boost/throw_exception.hpp	2015-07-16 22:36:06.940958023 +0200
@@ -57,7 +57,7 @@
 
 #else
 
-inline void throw_exception_assert_compatibility( std::exception const & ) { }
+inline void throw_exception_assert_compatibility( __attribute__ ((unused)) std::exception const & ) { }
 
 template<class E> BOOST_ATTRIBUTE_NORETURN inline void throw_exception( E const & e )
 template<class E> BOOST_NORETURN inline void throw_exception( E const & e )
 {
--- misc/boost_1_44_0/boost/utility/addressof.hpp	2009-05-16 20:15:17.000000000 +0200
+++ misc/build/boost_1_44_0/boost/utility/addressof.hpp	2012-01-20 12:44:07.128316328 +0100
@@ -34,7 +34,7 @@
diff -ru boost.orig/boost/type_index/stl_type_index.hpp boost/boost/type_index/stl_type_index.hpp
--- foo/misc/boost.orig/boost/type_index/stl_type_index.hpp	2015-06-21 22:16:46.000000000 +0200
+++ foo/misc/boost/boost/type_index/stl_type_index.hpp	2015-07-16 22:55:42.886944806 +0200
@@ -174,7 +174,7 @@
 
 template<class T> struct addressof_impl
 {
-    static inline T * f( T & v, long )
+    static inline T * f( T & v, __attribute__ ((unused)) long )
     {
         return reinterpret_cast<T*>(
             &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
--- misc/boost_1_44_0/boost/variant/detail/visitation_impl.hpp	2010-06-10 17:32:07.000000000 +0200
+++ misc/build/boost_1_44_0/boost/variant/detail/visitation_impl.hpp	2012-01-20 12:44:07.128316328 +0100
@@ -121,7 +121,7 @@
 
 inline std::size_t stl_type_index::hash_code() const BOOST_NOEXCEPT {
-#if _MSC_VER > 1600 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5 && defined(__GXX_EXPERIMENTAL_CXX0X__))
+#if (defined(_MSC_VER) && _MSC_VER > 1600) || (__GNUC__ == 4 && __GNUC_MINOR__ > 5 && defined(__GXX_EXPERIMENTAL_CXX0X__))
     return data_->hash_code();
 #else
     return boost::hash_range(raw_name(), raw_name() + std::strlen(raw_name()));
diff -ru boost.orig/boost/variant/detail/visitation_impl.hpp boost/boost/variant/detail/visitation_impl.hpp
--- foo/misc/boost.orig/boost/variant/detail/visitation_impl.hpp	2015-06-25 23:53:21.000000000 +0200
+++ foo/misc/boost/boost/variant/detail/visitation_impl.hpp	2015-07-16 22:40:41.528954937 +0200
@@ -105,7 +105,7 @@
 inline
     BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
 visitation_impl_invoke_impl(
@@ -748,25 +1133,7 @@
     , mpl::true_// never_uses_backup
     )
 {
@@ -158,7 +158,7 @@
 visitation_impl_invoke(
       int internal_which, Visitor& visitor, VoidPtrCV storage, T* t
     , NoBackupFlag
-    , int
+    , __attribute__ ((unused)) int
     )
 {
     typedef typename mpl::or_<
@@ -176,7 +176,7 @@
 template <typename Visitor, typename VoidPtrCV, typename NBF>
 inline
     BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
-visitation_impl_invoke(int, Visitor&, VoidPtrCV, apply_visitor_unrolled*, NBF, long)
+visitation_impl_invoke(__attribute__ ((unused)) int, __attribute__ ((unused)) Visitor&, VoidPtrCV, __attribute__ ((unused)) apply_visitor_unrolled*, NBF, __attribute__ ((unused)) long)
 {
     // should never be here at runtime:
     BOOST_ASSERT(false);
@@ -198,9 +198,9 @@
@@ -181,9 +181,9 @@
 inline
     BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
 visitation_impl(
@@ -777,8 +1144,8 @@
+    , NBF, __attribute__ ((unused)) W* = 0, __attribute__ ((unused)) S* = 0
     )
 {
     // should never be here at runtime:
@@ -221,7 +221,7 @@
     // should never be here at runtime!
@@ -203,7 +203,7 @@
     , Visitor& visitor, VoidPtrCV storage
     , mpl::false_ // is_apply_visitor_unrolled
     , NoBackupFlag no_backup_flag
@@ -787,29 +1154,31 @@
     )
 {
     // Typedef apply_visitor_unrolled steps and associated types...
--- misc/boost_1_44_0/boost/variant/get.hpp	2005-08-25 18:27:28.000000000 +0200
+++ misc/build/boost_1_44_0/boost/variant/get.hpp	2012-01-20 12:44:07.129316324 +0100
@@ -85,7 +85,7 @@
diff -ru boost.orig/boost/variant/get.hpp boost/boost/variant/get.hpp
--- foo/misc/boost.orig/boost/variant/get.hpp	2015-06-25 23:53:21.000000000 +0200
+++ foo/misc/boost/boost/variant/get.hpp	2015-07-16 22:41:42.159954255 +0200
@@ -80,7 +80,7 @@
     }
 
     template <typename U>
-    pointer operator()(const U&) const
+    pointer operator()(__attribute__ ((unused)) const U&) const
-    pointer operator()(const U&) const BOOST_NOEXCEPT
+    pointer operator()(__attribute__ ((unused)) const U&) const BOOST_NOEXCEPT
     {
         return static_cast<pointer>(0);
     }
--- misc/boost_1_44_0/boost/variant/variant.hpp	2010-06-10 17:32:07.000000000 +0200
+++ misc/build/boost_1_44_0/boost/variant/variant.hpp	2012-01-20 12:44:07.129316324 +0100
@@ -290,7 +290,7 @@
diff -ru boost.orig/boost/variant/variant.hpp boost/boost/variant/variant.hpp
--- foo/misc/boost.orig/boost/variant/variant.hpp	2015-06-25 23:53:21.000000000 +0200
+++ foo/misc/boost/boost/variant/variant.hpp	2015-07-16 22:44:37.631952283 +0200
@@ -312,7 +312,7 @@
 
     template <typename T>
         BOOST_VARIANT_AUX_RETURN_VOID_TYPE
-    internal_visit(T& operand, int) const
+    internal_visit(T& operand, __attribute__ ((unused)) int) const
-    internal_visit(T& operand, int) const BOOST_NOEXCEPT
+    internal_visit(T& operand, __attribute__ ((unused)) int) const BOOST_NOEXCEPT
     {
         operand.~T();
         operand.~T(); // must be noexcept
 
@@ -404,7 +404,7 @@
@@ -392,7 +392,7 @@
 
     template <typename T>
         BOOST_VARIANT_AUX_RETURN_VOID_TYPE
@@ -818,7 +1187,7 @@
     {
         new(storage_) T(operand);
         BOOST_VARIANT_AUX_RETURN_VOID;
@@ -454,7 +454,7 @@
@@ -539,7 +539,7 @@
 
     template <typename T>
         BOOST_VARIANT_AUX_RETURN_VOID_TYPE
@@ -827,7 +1196,7 @@
     {
         // NOTE TO USER :
         // Compile error here indicates one of variant's bounded types does
@@ -502,7 +502,7 @@
@@ -585,7 +585,7 @@
     }
 
     template <typename U>
@@ -836,81 +1205,3 @@
     {
         return false;
     }
@@ -827,7 +827,7 @@
 public: // internal visitor interfaces
 
     template <typename T>
-    result_type internal_visit(T& operand, int)
+    result_type internal_visit(T& operand, __attribute__ ((unused)) int)
     {
         return visitor_(operand);
     }
@@ -1225,7 +1225,7 @@
     public: // internal visitor interfaces (below)
 
         template <typename T>
-        int internal_visit(T& operand, int) const
+        int internal_visit(T& operand, __attribute__ ((unused)) int) const
         {
             // NOTE TO USER :
             // Compile error here indicates one of the source variant's types 
@@ -1288,7 +1288,7 @@
     template <typename T>
     void convert_construct(
           T& operand
-        , int
+        , __attribute__ ((unused)) int
         , mpl::false_ = mpl::false_() // is_foreign_variant
         )
     {
@@ -1308,7 +1308,7 @@
     template <typename Variant>
     void convert_construct(
           Variant& operand
-        , long
+        , __attribute__ ((unused)) long
         , mpl::true_// is_foreign_variant
         )
     {
@@ -1348,7 +1348,7 @@
     template <BOOST_VARIANT_ENUM_PARAMS(typename U)>
     void convert_construct(
           boost::variant<BOOST_VARIANT_ENUM_PARAMS(U)>& operand
-        , long
+        , __attribute__ ((unused)) long
         )
     {
         convert_construct_variant(operand);
@@ -1553,7 +1553,7 @@
 
         template <typename RhsT>
             BOOST_VARIANT_AUX_RETURN_VOID_TYPE
-        internal_visit(const RhsT& rhs_content, int)
+        internal_visit(const RhsT& rhs_content, __attribute__ ((unused)) int)
         {
             typedef typename has_nothrow_copy<RhsT>::type
                 nothrow_copy;
--- misc/boost_1_44_0/boost/ptr_container/detail/default_deleter.hpp
+++ misc/build/boost_1_44_0/boost/ptr_container/detail/default_deleter.hpp
@@ -61,7 +61,7 @@
 { 
     default_deleter() { }
     template<typename TT>
-    default_deleter(default_deleter<TT> tt) { }
+    default_deleter(__attribute__ ((unused)) default_deleter<TT> tt) { }
 };
 
 } } } // End namespaces ptr_container_detail, move_ptrs, boost.
--- misc/boost_1_44_0/boost/ptr_container/ptr_sequence_adapter.hpp
+++ misc/build/boost_1_44_0/boost/ptr_container/ptr_sequence_adapter.hpp
@@ -664,8 +664,8 @@
             
         }
 
-        void range_check_impl( iterator first, iterator last, 
-                               std::bidirectional_iterator_tag )
+        void range_check_impl( __attribute__ ((unused)) iterator first, __attribute__ ((unused)) iterator last, 
+                               std::bidirectional_iterator_tag )
         { /* do nothing */ }
 
         void range_check_impl( iterator first, iterator last,
diff --git a/external/boost/boost_1_59_0.iostreams.wshadow.patch b/external/boost/boost_1_59_0.iostreams.wshadow.patch
new file mode 100644
index 0000000..2039064
--- /dev/null
+++ b/external/boost/boost_1_59_0.iostreams.wshadow.patch
@@ -0,0 +1,197 @@
diff -ru boost.orig/boost/iostreams/detail/buffer.hpp boost/boost/iostreams/detail/buffer.hpp
--- foo/misc/boost.orig/boost/iostreams/detail/buffer.hpp	2015-07-19 12:06:22.159924201 +0200
+++ foo/misc/boost/boost/iostreams/detail/buffer.hpp	2015-07-19 12:07:32.000923416 +0200
@@ -179,9 +179,9 @@
     : basic_buffer<Ch, Alloc>(buffer_size) { }
 
 template<typename Ch, typename Alloc>
-inline void buffer<Ch, Alloc>::set(std::streamsize ptr, std::streamsize end)
+inline void buffer<Ch, Alloc>::set(std::streamsize ptr_arg, std::streamsize end)
 { 
-    ptr_ = data() + ptr; 
+    ptr_ = data() + ptr_arg; 
     eptr_ = data() + end; 
 }
 
diff -ru boost.orig/boost/iostreams/filter/gzip.hpp boost/boost/iostreams/filter/gzip.hpp
--- foo/misc/boost.orig/boost/iostreams/filter/gzip.hpp	2015-01-25 20:33:40.000000000 +0100
+++ foo/misc/boost/boost/iostreams/filter/gzip.hpp	2015-07-19 12:23:11.208912860 +0200
@@ -135,16 +135,16 @@
 struct gzip_params : zlib_params {
 
     // Non-explicit constructor.
-    gzip_params( int level              = gzip::default_compression,
-                 int method             = gzip::deflated,
-                 int window_bits        = gzip::default_window_bits,
-                 int mem_level          = gzip::default_mem_level,
-                 int strategy           = gzip::default_strategy,
-                 std::string file_name  = "",
-                 std::string comment    = "",
-                 std::time_t mtime      = 0 )
-        : zlib_params(level, method, window_bits, mem_level, strategy),
-          file_name(file_name), comment(comment), mtime(mtime)
+    gzip_params( int level_              = gzip::default_compression,
+                 int method_             = gzip::deflated,
+                 int window_bits_        = gzip::default_window_bits,
+                 int mem_level_          = gzip::default_mem_level,
+                 int strategy_           = gzip::default_strategy,
+                 std::string file_name_  = "",
+                 std::string comment_    = "",
+                 std::time_t mtime_      = 0 )
+        : zlib_params(level_, method_, window_bits_, mem_level_, strategy_),
+          file_name(file_name_), comment(comment_), mtime(mtime_)
         { }
     std::string  file_name;
     std::string  comment;
@@ -160,9 +160,9 @@
 //
 class gzip_error : public BOOST_IOSTREAMS_FAILURE {
 public:
-    explicit gzip_error(int error)
+    explicit gzip_error(int error_arg)
         : BOOST_IOSTREAMS_FAILURE("gzip error"),
-          error_(error), zlib_error_code_(zlib::okay) { }
+          error_(error_arg), zlib_error_code_(zlib::okay) { }
     explicit gzip_error(const zlib_error& e)
         : BOOST_IOSTREAMS_FAILURE("gzip error"),
           error_(gzip::zlib_error), zlib_error_code_(e.error())
@@ -505,8 +505,8 @@
                 if (footer_.done()) {
                     if (footer_.crc() != this->crc())
                         boost::throw_exception(gzip_error(gzip::bad_crc));
-                    int c = boost::iostreams::get(peek);
-                    if (traits_type::is_eof(c)) {
+                    int c2 = boost::iostreams::get(peek);
+                    if (traits_type::is_eof(c2)) {
                         state_ = s_done;
                     } else {
                         peek.putback(c);
@@ -567,8 +567,8 @@
     struct peekable_source {
         typedef char char_type;
         struct category : source_tag, peekable_tag { };
-        explicit peekable_source(Source& src, const string_type& putback = "") 
-            : src_(src), putback_(putback), offset_(0)
+        explicit peekable_source(Source& src, const string_type& putback_arg = "") 
+            : src_(src), putback_(putback_arg), offset_(0)
             { }
         std::streamsize read(char* s, std::streamsize n)
         {
diff -ru boost.orig/boost/iostreams/filter/symmetric.hpp boost/boost/iostreams/filter/symmetric.hpp
--- foo/misc/boost.orig/boost/iostreams/filter/symmetric.hpp	2015-01-25 20:33:40.000000000 +0100
+++ foo/misc/boost/boost/iostreams/filter/symmetric.hpp	2015-07-19 12:11:10.202920964 +0200
@@ -102,7 +102,7 @@
         if (!(state() & f_read))
             begin_read();
 
-        buffer_type&  buf = pimpl_->buf_;
+        buffer_type&  buf_l = pimpl_->buf_;
         int           status = (state() & f_eof) != 0 ? f_eof : f_good;
         char_type    *next_s = s,
                      *end_s = s + n;
@@ -110,12 +110,12 @@
         {
             // Invoke filter if there are unconsumed characters in buffer or if
             // filter must be flushed.
-            bool flush = status == f_eof;
-            if (buf.ptr() != buf.eptr() || flush) {
-                const char_type* next = buf.ptr();
+            bool flush_l = status == f_eof;
+            if (buf_l.ptr() != buf_l.eptr() || flush_l) {
+                const char_type* next = buf_l.ptr();
                 bool done =
-                    !filter().filter(next, buf.eptr(), next_s, end_s, flush);
-                buf.ptr() = buf.data() + (next - buf.data());
+                    !filter().filter(next, buf_l.eptr(), next_s, end_s, flush_l);
+                buf_l.ptr() = buf_l.data() + (next - buf_l.data());
                 if (done)
                     return detail::check_eof(
                                static_cast<std::streamsize>(next_s - s)
@@ -124,7 +124,7 @@
 
             // If no more characters are available without blocking, or
             // if read request has been satisfied, return.
-            if ( (status == f_would_block && buf.ptr() == buf.eptr()) ||
+            if ( (status == f_would_block && buf_l.ptr() == buf_l.eptr()) ||
                  next_s == end_s )
             {
                 return static_cast<std::streamsize>(next_s - s);
@@ -142,12 +142,12 @@
         if (!(state() & f_write))
             begin_write();
 
-        buffer_type&     buf = pimpl_->buf_;
+        buffer_type&     buf_l = pimpl_->buf_;
         const char_type *next_s, *end_s;
         for (next_s = s, end_s = s + n; next_s != end_s; ) {
-            if (buf.ptr() == buf.eptr() && !flush(snk))
+            if (buf_l.ptr() == buf_l.eptr() && !flush(snk))
                 break;
-            if(!filter().filter(next_s, end_s, buf.ptr(), buf.eptr(), false)) {
+            if(!filter().filter(next_s, end_s, buf_l.ptr(), buf_l.eptr(), false)) {
                 flush(snk);
                 break;
             }
@@ -165,14 +165,14 @@
 
             // Repeatedly invoke filter() with no input.
             try {
-                buffer_type&     buf = pimpl_->buf_;
+                buffer_type&     buf_l = pimpl_->buf_;
                 char_type        dummy;
                 const char_type* end = &dummy;
                 bool             again = true;
                 while (again) {
-                    if (buf.ptr() != buf.eptr())
-                        again = filter().filter( end, end, buf.ptr(),
-                                                 buf.eptr(), true );
+                    if (buf_l.ptr() != buf_l.eptr())
+                        again = filter().filter( end, end, buf_l.ptr(),
+                                                 buf_l.eptr(), true );
                     flush(snk);
                 }
             } catch (...) {
diff -ru boost.orig/boost/iostreams/filter/zlib.hpp boost/boost/iostreams/filter/zlib.hpp
--- foo/misc/boost.orig/boost/iostreams/filter/zlib.hpp	2015-01-25 20:33:40.000000000 +0100
+++ foo/misc/boost/boost/iostreams/filter/zlib.hpp	2015-07-19 12:13:59.995919056 +0200
@@ -110,16 +110,16 @@
 struct zlib_params {
 
     // Non-explicit constructor.
-    zlib_params( int level           = zlib::default_compression,
-                 int method          = zlib::deflated,
-                 int window_bits     = zlib::default_window_bits, 
-                 int mem_level       = zlib::default_mem_level, 
-                 int strategy        = zlib::default_strategy,
-                 bool noheader       = zlib::default_noheader,
-                 bool calculate_crc  = zlib::default_crc )
-        : level(level), method(method), window_bits(window_bits),
-          mem_level(mem_level), strategy(strategy),  
-          noheader(noheader), calculate_crc(calculate_crc)
+    zlib_params( int level_           = zlib::default_compression,
+                 int method_          = zlib::deflated,
+                 int window_bits_     = zlib::default_window_bits, 
+                 int mem_level_       = zlib::default_mem_level, 
+                 int strategy_        = zlib::default_strategy,
+                 bool noheader_       = zlib::default_noheader,
+                 bool calculate_crc_  = zlib::default_crc )
+        : level(level_), method(method_), window_bits(window_bits_),
+          mem_level(mem_level_), strategy(strategy_),  
+          noheader(noheader_), calculate_crc(calculate_crc_)
         { }
     int level;
     int method;
diff -ru boost.orig/libs/iostreams/src/zlib.cpp boost/libs/iostreams/src/zlib.cpp
--- foo/misc/boost.orig/libs/iostreams/src/zlib.cpp	2015-01-25 20:33:40.000000000 +0100
+++ foo/misc/boost/libs/iostreams/src/zlib.cpp	2015-07-19 12:14:51.815918473 +0200
@@ -67,8 +67,8 @@
 
 //------------------Implementation of zlib_error------------------------------//
                     
-zlib_error::zlib_error(int error) 
-    : BOOST_IOSTREAMS_FAILURE("zlib error"), error_(error) 
+zlib_error::zlib_error(int error_arg) 
+    : BOOST_IOSTREAMS_FAILURE("zlib error"), error_(error_arg) 
     { }
 
 void zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(int error)
diff --git a/external/boost/boost_1_59_0.iostreams.wunused.patch b/external/boost/boost_1_59_0.iostreams.wunused.patch
new file mode 100644
index 0000000..a05dd1c
--- /dev/null
+++ b/external/boost/boost_1_59_0.iostreams.wunused.patch
@@ -0,0 +1,12 @@
diff -ru boost.orig/boost/iostreams/filter/gzip.hpp boost/boost/iostreams/filter/gzip.hpp
--- foo/misc/boost.orig/boost/iostreams/filter/gzip.hpp	2015-07-22 20:58:35.758990022 +0200
+++ foo/misc/boost/boost/iostreams/filter/gzip.hpp	2015-07-22 21:20:50.982997292 +0200
@@ -279,7 +279,7 @@
         boost::iostreams::put(next, static_cast<char>(0xFF & (n >> 24)));
     }
     template<typename Sink>
-    static void write_long(long n, Sink& next, boost::mpl::false_)
+    static void write_long(long, Sink&, boost::mpl::false_)
     {
     }
     template<typename Sink>
diff --git a/external/boost/boost_1_59_0.move.Bool-type-collision.4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.patch b/external/boost/boost_1_59_0.move.Bool-type-collision.4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.patch
new file mode 100644
index 0000000..4974127
--- /dev/null
+++ b/external/boost/boost_1_59_0.move.Bool-type-collision.4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.patch
@@ -0,0 +1,44 @@
This patch is needed to avoid type collision between Bool type
defined in XLib with non used non class template parameter
name introduced in this commit in move library:

  4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.

The obscure error message was issued on both Clang 3.8 and GCC 4.8.1:

   In file included from /home/davido/projects/libo/include/prex.h:32:0,
                 from /home/davido/projects/libo/include/vcl/opengl/OpenGLHelper.hxx:20,
                 from /home/davido/projects/libo/vcl/source/opengl/OpenGLHelper.cxx:11:
/home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/move/detail/meta_utils.hpp:350:15: error: two or more data types in declaration of ‘parameter’
 template<bool Bool, class B = true_, class C = true_, class D = true_>
               ^
In file included from /home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/move/utility_core.hpp:30:0,
                 from /home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/move/utility.hpp:28,
                 from /home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/optional/optional.hpp:50,
                 from /home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/optional.hpp:15,
                 from /home/davido/projects/libo/workdir/CustomTarget/officecfg/registry/officecfg/Office/Common.hxx:7,
                 from /home/davido/projects/libo/vcl/source/opengl/OpenGLHelper.cxx:22:
/home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/move/detail/meta_utils.hpp:352:29: note: invalid template non-type parameter
    : and_impl<B::value, C, D>

diff -ru boost.orig/boost/move/detail/meta_utils.hpp boost/boost/move/detail/meta_utils.hpp
--- foo/misc/boost.orig/boost/move/detail/meta_utils.hpp	2015-07-19 14:16:13.764836630 +0200
+++ foo/misc/boost/boost/move/detail/meta_utils.hpp	2015-07-19 21:04:15.960985030 +0200
@@ -347,7 +347,7 @@
 //                         and_
 //
 //////////////////////////////////////////////////////////////////////////////
-template<bool Bool, class B = true_, class C = true_, class D = true_>
+template<bool, class B = true_, class C = true_, class D = true_>
 struct and_impl
    : and_impl<B::value, C, D>
 {};
@@ -374,7 +374,7 @@
 //                            or_
 //
 //////////////////////////////////////////////////////////////////////////////
-template<bool Bool, class B = false_, class C = false_, class D = false_>
+template<bool, class B = false_, class C = false_, class D = false_>
 struct or_impl
    : or_impl<B::value, C, D>
 {};
diff --git a/external/boost/boost_1_59_0.mpl.config.wundef.patch b/external/boost/boost_1_59_0.mpl.config.wundef.patch
new file mode 100644
index 0000000..2826cfc
--- /dev/null
+++ b/external/boost/boost_1_59_0.mpl.config.wundef.patch
@@ -0,0 +1,11 @@
diff -ru boost.orig/boost/mpl/aux_/config/operators.hpp boost/boost/mpl/aux_/config/operators.hpp
--- foo/misc/boost.orig/boost/mpl/aux_/config/operators.hpp	2015-07-19 11:20:40.015955021 +0200
+++ foo/misc/boost/boost/mpl/aux_/config/operators.hpp	2015-07-19 11:33:14.342946543 +0200
@@ -24,7 +24,6 @@
         || BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
         || BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, <= 0x0295) \
         || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
-        || BOOST_WORKAROUND(__NVCC__, BOOST_TESTED_AT(1)) \
         )
 
 #   define BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING
diff --git a/external/boost/boost_1_59_0.multi_array.wshadow.patch b/external/boost/boost_1_59_0.multi_array.wshadow.patch
new file mode 100644
index 0000000..1f7b28a
--- /dev/null
+++ b/external/boost/boost_1_59_0.multi_array.wshadow.patch
@@ -0,0 +1,505 @@
diff -ru boost.orig/boost/multi_array/concept_checks.hpp boost/boost/multi_array/concept_checks.hpp
--- foo/misc/boost.orig/boost/multi_array/concept_checks.hpp	2015-07-19 21:08:27.605982202 +0200
+++ foo/misc/boost/boost/multi_array/concept_checks.hpp	2015-07-19 21:18:59.330975102 +0200
@@ -162,27 +162,27 @@
       const_constraints(a);
     }
 
-    void const_constraints(const Array& a) {
+    void const_constraints(const Array& a_) {
 
       //      value_type vt = a[ id ];
 
       // Test slicing, keeping only the first dimension, losing the rest
-      detail::idgen_helper<NumDims-1>::call(a,idgen[range],id);
+      detail::idgen_helper<NumDims-1>::call(a_,idgen[range],id);
 
       // Test slicing, keeping all dimensions.
-      detail::idgen_helper<NumDims-1>::call(a,idgen[range],range);
+      detail::idgen_helper<NumDims-1>::call(a_,idgen[range],range);
 
-      st = a.size();
-      st = a.num_dimensions();
-      st = a.num_elements();
-      stp = a.shape();
-      idp = a.strides();
-      idp = a.index_bases();
-      cit = a.begin();
-      cit = a.end();
-      crit = a.rbegin();
-      crit = a.rend();
-      eltp = a.origin();
+      st = a_.size();
+      st = a_.num_dimensions();
+      st = a_.num_elements();
+      stp = a_.shape();
+      idp = a_.strides();
+      idp = a_.index_bases();
+      cit = a_.begin();
+      cit = a_.end();
+      crit = a_.rbegin();
+      crit = a_.rend();
+      eltp = a_.origin();
     }
 
     typedef typename Array::value_type value_type;
diff -ru boost.orig/boost/multi_array/extent_range.hpp boost/boost/multi_array/extent_range.hpp
--- foo/misc/boost.orig/boost/multi_array/extent_range.hpp	2014-04-23 17:36:51.000000000 +0200
+++ foo/misc/boost/boost/multi_array/extent_range.hpp	2015-07-19 21:14:52.850977872 +0200
@@ -26,11 +26,11 @@
   typedef Extent index;
   typedef SizeType size_type;
 
-  extent_range(index start, index finish) :
-    super_type(start,finish) { }
+  extent_range(index start_, index finish_) :
+    super_type(start_,finish_) { }
 
-  extent_range(index finish) :
-    super_type(0,finish) { }
+  extent_range(index finish_) :
+    super_type(0,finish_) { }
 
   extent_range() : super_type(0,0) { }
 
diff -ru boost.orig/boost/multi_array/index_range.hpp boost/boost/multi_array/index_range.hpp
--- foo/misc/boost.orig/boost/multi_array/index_range.hpp	2014-04-23 17:36:51.000000000 +0200
+++ foo/misc/boost/boost/multi_array/index_range.hpp	2015-07-19 21:17:06.618976369 +0200
@@ -60,8 +60,8 @@
       degenerate_ = true;
     }
 
-    explicit index_range(index start, index finish, index stride=1)
-      : start_(start), finish_(finish), stride_(stride),
+    explicit index_range(index start_arg, index finish_arg, index stride_arg=1)
+      : start_(start_arg), finish_(finish_arg), stride_(stride_arg),
         degenerate_(false)
     { }
 
@@ -107,11 +107,11 @@
 
     index stride() const { return stride_; }
 
-    void set_index_range(index start, index finish, index stride=1)
+    void set_index_range(index start_arg, index finish_arg, index stride_arg=1)
     {
-      start_ = start;
-      finish_ = finish;
-      stride_ = stride;
+      start_ = start_arg;
+      finish_ = finish_arg;
+      stride_ = stride_arg;
     }
 
     static index_range all() 
diff -ru boost.orig/boost/multi_array/multi_array_ref.hpp boost/boost/multi_array/multi_array_ref.hpp
--- foo/misc/boost.orig/boost/multi_array/multi_array_ref.hpp	2014-04-23 17:36:51.000000000 +0200
+++ foo/misc/boost/boost/multi_array/multi_array_ref.hpp	2015-07-19 21:26:35.935969970 +0200
@@ -125,13 +125,13 @@
   }
   
   template <class InputIterator>
-  void assign(InputIterator begin, InputIterator end) {
+  void assign(InputIterator begin_, InputIterator end_) {
     boost::function_requires<InputIteratorConcept<InputIterator> >();
 
-    InputIterator in_iter = begin;
+    InputIterator in_iter = begin_;
     T* out_iter = base_;
     std::size_t copy_count=0;
-    while (in_iter != end && copy_count < num_elements_) {
+    while (in_iter != end_ && copy_count < num_elements_) {
       *out_iter++ = *in_iter++;
       copy_count++;      
     }
@@ -324,15 +324,15 @@
   explicit
   const_multi_array_ref(TPtr base,
                         const storage_order_type& so,
-                        const index * index_bases,
+                        const index * index_bases_,
                         const size_type* extents) :
     base_(base), storage_(so), origin_offset_(0), directional_offset_(0)
  {
    // If index_bases or extents is null, then initialize the corresponding
    // private data to zeroed lists.
-   if(index_bases) {
+   if(index_bases_) {
      boost::detail::multi_array::
-       copy_n(index_bases,NumDims,index_base_list_.begin());
+       copy_n(index_bases_,NumDims,index_base_list_.begin());
    } else {
      std::fill_n(index_base_list_.begin(),NumDims,0);
    }
@@ -611,9 +611,9 @@
   // This is only supplied to support multi_array's default constructor
   explicit multi_array_ref(T* base,
                            const storage_order_type& so,
-                           const index* index_bases,
+                           const index* index_bases_arg,
                            const size_type* extents) :
-    super_type(base,so,index_bases,extents) { }
+    super_type(base,so,index_bases_arg,extents) { }
 
 };
 
diff -ru boost.orig/boost/multi_array/storage_order.hpp boost/boost/multi_array/storage_order.hpp
--- foo/misc/boost.orig/boost/multi_array/storage_order.hpp	2014-04-23 17:36:51.000000000 +0200
+++ foo/misc/boost/boost/multi_array/storage_order.hpp	2015-07-19 21:23:07.040972318 +0200
@@ -34,10 +34,10 @@
   public:
     typedef detail::multi_array::size_type size_type;
     template <typename OrderingIter, typename AscendingIter>
-    general_storage_order(OrderingIter ordering,
-                          AscendingIter ascending) {
-      boost::detail::multi_array::copy_n(ordering,NumDims,ordering_.begin());
-      boost::detail::multi_array::copy_n(ascending,NumDims,ascending_.begin());
+    general_storage_order(OrderingIter ordering_arg,
+                          AscendingIter ascending_arg) {
+      boost::detail::multi_array::copy_n(ordering_arg,NumDims,ordering_.begin());
+      boost::detail::multi_array::copy_n(ascending_arg,NumDims,ascending_.begin());
     }
 
     // RG - ideally these would not be necessary, but some compilers
diff -ru boost.orig/boost/multi_array/subarray.hpp boost/boost/multi_array/subarray.hpp
--- foo/misc/boost.orig/boost/multi_array/subarray.hpp	2014-04-23 17:36:51.000000000 +0200
+++ foo/misc/boost/boost/multi_array/subarray.hpp	2015-07-19 21:25:51.521970469 +0200
@@ -177,9 +177,9 @@
 
   const_sub_array (TPtr base,
                  const size_type* extents,
-                 const index* strides,
+                 const index* strides_arg,
                  const index* index_base) :
-    base_(base), extents_(extents), strides_(strides),
+    base_(base), extents_(extents), strides_(strides_arg),
     index_base_(index_base) {
   }
 
@@ -357,9 +357,9 @@
 
   sub_array (T* base,
             const size_type* extents,
-            const index* strides,
+            const index* strides_arg,
             const index* index_base) :
-    super_type(base,extents,strides,index_base) {
+    super_type(base,extents,strides_arg,index_base) {
   }
 
 };
diff -ru boost.orig/boost/multi_array/view.hpp boost/boost/multi_array/view.hpp
--- foo/misc/boost.orig/boost/multi_array/view.hpp	2014-04-23 17:36:51.000000000 +0200
+++ foo/misc/boost/boost/multi_array/view.hpp	2015-07-19 21:25:28.396970729 +0200
@@ -228,7 +228,7 @@
   template <typename ExtentList, typename Index>
   explicit const_multi_array_view(TPtr base,
                            const ExtentList& extents,
-                           const boost::array<Index,NumDims>& strides): 
+                           const boost::array<Index,NumDims>& strides_): 
     base_(base), origin_offset_(0) {
 
     index_base_list_.assign(0);
@@ -237,7 +237,7 @@
     boost::detail::multi_array::
       copy_n(extents.begin(),NumDims,extent_list_.begin());
     boost::detail::multi_array::
-      copy_n(strides.begin(),NumDims,stride_list_.begin());
+      copy_n(strides_.begin(),NumDims,stride_list_.begin());
 
     // Calculate the array size
     num_elements_ = std::accumulate(extent_list_.begin(),extent_list_.end(),
@@ -430,8 +430,8 @@
   template <typename ExtentList, typename Index>
   explicit multi_array_view(T* base,
                             const ExtentList& extents,
-                            const boost::array<Index,NumDims>& strides) :
-    super_type(base,extents,strides) { }
+                            const boost::array<Index,NumDims>& strides_) :
+    super_type(base,extents,strides_) { }
 
 };
 
diff -ru boost.org/boost/multi_array/multi_array_ref.hpp boost/boost/multi_array/multi_array_ref.hpp
--- foo/misc/boost.org/boost/multi_array/multi_array_ref.hpp	2015-07-21 23:15:13.897990987 +0200
+++ foo/misc/boost/boost/multi_array/multi_array_ref.hpp	2015-07-22 07:41:54.348055865 +0200
@@ -87,24 +87,24 @@
       num_elements_(other.num_elements_)  {  }
 
   template <typename ExtentList>
-  explicit const_multi_array_ref(TPtr base, const ExtentList& extents) :
+  explicit const_multi_array_ref(TPtr base, const ExtentList& extents_arg) :
     base_(base), storage_(c_storage_order()) {
     boost::function_requires<
       CollectionConcept<ExtentList> >();
 
     index_base_list_.assign(0);
-    init_multi_array_ref(extents.begin());
+    init_multi_array_ref(extents_arg.begin());
   }
   
   template <typename ExtentList>
-  explicit const_multi_array_ref(TPtr base, const ExtentList& extents,
+  explicit const_multi_array_ref(TPtr base, const ExtentList& extents_arg,
                        const general_storage_order<NumDims>& so) : 
     base_(base), storage_(so) {
     boost::function_requires<
       CollectionConcept<ExtentList> >();
 
     index_base_list_.assign(0);
-    init_multi_array_ref(extents.begin());
+    init_multi_array_ref(extents_arg.begin());
   }
   
   explicit const_multi_array_ref(TPtr base,
@@ -162,14 +162,14 @@
   }
 
   template <typename SizeList>
-  void reshape(const SizeList& extents) {
+  void reshape(const SizeList& extents_arg) {
     boost::function_requires<
       CollectionConcept<SizeList> >();
     BOOST_ASSERT(num_elements_ ==
-                 std::accumulate(extents.begin(),extents.end(),
+                 std::accumulate(extents_arg.begin(),extents_arg.end(),
                                  size_type(1),std::multiplies<size_type>()));
 
-    std::copy(extents.begin(),extents.end(),extent_list_.begin());
+    std::copy(extents_arg.begin(),extents_arg.end(),extent_list_.begin());
     this->compute_strides(stride_list_,extent_list_,storage_);
 
     origin_offset_ =
@@ -209,11 +209,11 @@
   }
 
   template <typename IndexList>
-  const element& operator()(IndexList indices) const {
+  const element& operator()(IndexList indices_arg) const {
     boost::function_requires<
       CollectionConcept<IndexList> >();
     return super_type::access_element(boost::type<const element&>(),
-                                      indices,origin(),
+                                      indices_arg,origin(),
                                       shape(),strides(),index_bases());
   }
 
@@ -228,12 +228,12 @@
   template <int NDims>
   typename const_array_view<NDims>::type 
   operator[](const detail::multi_array::
-             index_gen<NumDims,NDims>& indices)
+             index_gen<NumDims,NDims>& indices_arg)
     const {
     typedef typename const_array_view<NDims>::type return_type;
     return
       super_type::generate_array_view(boost::type<return_type>(),
-                                      indices,
+                                      indices_arg,
                                       shape(),
                                       strides(),
                                       index_bases(),
@@ -325,7 +325,7 @@
   const_multi_array_ref(TPtr base,
                         const storage_order_type& so,
                         const index * index_bases_,
-                        const size_type* extents) :
+                        const size_type* extents_arg) :
     base_(base), storage_(so), origin_offset_(0), directional_offset_(0)
  {
    // If index_bases or extents is null, then initialize the corresponding
@@ -336,8 +336,8 @@
    } else {
      std::fill_n(index_base_list_.begin(),NumDims,0);
    }
-   if(extents) {
-     init_multi_array_ref(extents);
+   if(extents_arg) {
+     init_multi_array_ref(extents_arg);
    } else {
      boost::array<index,NumDims> extent_list;
      extent_list.assign(0);
@@ -371,12 +371,12 @@
               boost::mem_fun_ref(&extent_range::start));
 
     // calculate the extents
-    extent_list extents;
+    extent_list extents_local;
     std::transform(ranges.ranges_.begin(),ranges.ranges_.end(),
-              extents.begin(),
+              extents_local.begin(),
               boost::mem_fun_ref(&extent_range::size));
 
-    init_multi_array_ref(extents.begin());
+    init_multi_array_ref(extents_local.begin());
   }
 
 
@@ -442,16 +442,16 @@
   };
 
   template <class ExtentList>
-  explicit multi_array_ref(T* base, const ExtentList& extents) :
-    super_type(base,extents) {
+  explicit multi_array_ref(T* base, const ExtentList& extents_arg) :
+    super_type(base,extents_arg) {
     boost::function_requires<
       CollectionConcept<ExtentList> >();
   }
 
   template <class ExtentList>
-  explicit multi_array_ref(T* base, const ExtentList& extents,
+  explicit multi_array_ref(T* base, const ExtentList& extents_arg,
                            const general_storage_order<NumDims>& so) :
-    super_type(base,extents,so) {
+    super_type(base,extents_arg,so) {
     boost::function_requires<
       CollectionConcept<ExtentList> >();
   }
@@ -506,11 +506,11 @@
   element* data() { return super_type::base_; }
 
   template <class IndexList>
-  element& operator()(const IndexList& indices) {
+  element& operator()(const IndexList& indices_arg) {
     boost::function_requires<
       CollectionConcept<IndexList> >();
     return super_type::access_element(boost::type<element&>(),
-                                      indices,origin(),
+                                      indices_arg,origin(),
                                       this->shape(),this->strides(),
                                       this->index_bases());
   }
@@ -528,11 +528,11 @@
   template <int NDims>
   typename array_view<NDims>::type 
   operator[](const detail::multi_array::
-             index_gen<NumDims,NDims>& indices) {
+             index_gen<NumDims,NDims>& indices_arg) {
     typedef typename array_view<NDims>::type return_type;
     return
       super_type::generate_array_view(boost::type<return_type>(),
-                                      indices,
+                                      indices_arg,
                                       this->shape(),
                                       this->strides(),
                                       this->index_bases(),
@@ -569,10 +569,10 @@
   const element* data() const { return super_type::data(); }
 
   template <class IndexList>
-  const element& operator()(const IndexList& indices) const {
+  const element& operator()(const IndexList& indices_arg) const {
     boost::function_requires<
       CollectionConcept<IndexList> >();
-    return super_type::operator()(indices);
+    return super_type::operator()(indices_arg);
   }
 
   const_reference operator[](index idx) const {
@@ -586,9 +586,9 @@
   template <int NDims>
   typename const_array_view<NDims>::type 
   operator[](const detail::multi_array::
-             index_gen<NumDims,NDims>& indices)
+             index_gen<NumDims,NDims>& indices_arg)
     const {
-    return super_type::operator[](indices);
+    return super_type::operator[](indices_arg);
   }
   
   const_iterator begin() const {
@@ -612,8 +612,8 @@
   explicit multi_array_ref(T* base,
                            const storage_order_type& so,
                            const index* index_bases_arg,
-                           const size_type* extents) :
-    super_type(base,so,index_bases_arg,extents) { }
+                           const size_type* extents_arg) :
+    super_type(base,so,index_bases_arg,extents_arg) { }
 
 };
 
diff -ru boost.org/boost/multi_array.hpp boost/boost/multi_array.hpp
--- foo/misc/boost.org/boost/multi_array.hpp	2014-04-23 17:36:51.000000000 +0200
+++ foo/misc/boost/boost/multi_array.hpp	2015-07-22 07:42:38.361058726 +0200
@@ -145,14 +145,14 @@
 
   template <class ExtentList>
   explicit multi_array(
-      ExtentList const& extents
+      ExtentList const& extents_arg
 #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
       , typename mpl::if_<
       detail::multi_array::is_multi_array_impl<ExtentList>,
       int&,int>::type* = 0
 #endif
       ) :
-    super_type((T*)initial_base_,extents) {
+    super_type((T*)initial_base_,extents_arg) {
     boost::function_requires<
       detail::multi_array::CollectionConcept<ExtentList> >();
     allocate_space();
@@ -160,19 +160,19 @@
 
     
   template <class ExtentList>
-  explicit multi_array(ExtentList const& extents,
+  explicit multi_array(ExtentList const& extents_arg,
                        const general_storage_order<NumDims>& so) :
-    super_type((T*)initial_base_,extents,so) {
+    super_type((T*)initial_base_,extents_arg,so) {
     boost::function_requires<
       detail::multi_array::CollectionConcept<ExtentList> >();
     allocate_space();
   }
 
   template <class ExtentList>
-  explicit multi_array(ExtentList const& extents,
+  explicit multi_array(ExtentList const& extents_arg,
                        const general_storage_order<NumDims>& so,
                        Allocator const& alloc) :
-    super_type((T*)initial_base_,extents,so), allocator_(alloc) {
+    super_type((T*)initial_base_,extents_arg,so), allocator_(alloc) {
     boost::function_requires<
       detail::multi_array::CollectionConcept<ExtentList> >();
     allocate_space();
@@ -381,7 +381,7 @@
 
 
   template <typename ExtentList>
-  multi_array& resize(const ExtentList& extents) {
+  multi_array& resize(const ExtentList& extents_arg) {
     boost::function_requires<
       detail::multi_array::CollectionConcept<ExtentList> >();
 
@@ -390,7 +390,7 @@
 
     for (int i=0; i != NumDims; ++i) {
       typedef typename gen_type::range range_type;
-      ranges.ranges_[i] = range_type(0,extents[i]);
+      ranges.ranges_[i] = range_type(0,extents_arg[i]);
     }
     
     return this->resize(ranges);
diff -ru boost.org/boost/property_tree/detail/json_parser/wide_encoding.hpp boost/boost/property_tree/detail/json_parser/wide_encoding.hpp
--- foo/misc/boost.org/boost/property_tree/detail/json_parser/wide_encoding.hpp	2015-07-07 14:20:48.000000000 +0200
+++ foo/misc/boost/boost/property_tree/detail/json_parser/wide_encoding.hpp	2015-07-22 06:51:07.089598136 +0200
@@ -104,7 +104,7 @@
 
         template <typename Iterator, typename Sentinel, typename TranscodedFn,
                   typename EncodingErrorFn>
-        void transcode_codepoint(Iterator& cur, Sentinel end,
+        void transcode_codepoint(Iterator& cur, Sentinel,
                                  TranscodedFn transcoded_fn,
                                  EncodingErrorFn error_fn,
                                  is_utf16<false>) const {
@@ -117,7 +117,7 @@
         }
         template <typename Iterator, typename Sentinel, typename TranscodedFn,
                   typename EncodingErrorFn>
-        void transcode_codepoint(Iterator& cur, Sentinel end,
+        void transcode_codepoint(Iterator& cur, Sentinel,
                                  TranscodedFn transcoded_fn,
                                  EncodingErrorFn error_fn,
                                  is_utf16<true>) const {
diff --git a/external/boost/boost_1_59_0.property_tree.wreturn-type.patch b/external/boost/boost_1_59_0.property_tree.wreturn-type.patch
new file mode 100644
index 0000000..d795bd6
--- /dev/null
+++ b/external/boost/boost_1_59_0.property_tree.wreturn-type.patch
@@ -0,0 +1,13 @@
diff -ru boost.org/boost/property_tree/detail/json_parser/standard_callbacks.hpp boost/boost/property_tree/detail/json_parser/standard_callbacks.hpp
--- foo/misc/boost.org/boost/property_tree/detail/json_parser/standard_callbacks.hpp	2015-07-07 14:20:48.000000000 +0200
+++ foo/misc/boost/boost/property_tree/detail/json_parser/standard_callbacks.hpp	2015-07-22 08:35:07.764263463 +0200
@@ -128,7 +128,7 @@
                 stack.pop_back();
                 return new_tree();
             }
-            assert(false);
+	    std::abort();
         }
         string& new_value() {
             if (stack.empty()) return new_tree().data();

diff --git a/external/boost/boost_1_59_0.property_tree.wshadow.patch b/external/boost/boost_1_59_0.property_tree.wshadow.patch
new file mode 100644
index 0000000..8cd0b33
--- /dev/null
+++ b/external/boost/boost_1_59_0.property_tree.wshadow.patch
@@ -0,0 +1,83 @@
diff -ru boost.orig/boost/property_tree/detail/json_parser/parser.hpp boost/boost/property_tree/detail/json_parser/parser.hpp
--- foo/misc/boost.orig/boost/property_tree/detail/json_parser/parser.hpp	2015-07-07 14:20:48.000000000 +0200
+++ foo/misc/boost/boost/property_tree/detail/json_parser/parser.hpp	2015-07-19 12:36:35.481903821 +0200
@@ -22,12 +22,12 @@
             code_unit;
         typedef bool (Encoding::*encoding_predicate)(code_unit c) const;
 
-        explicit source(Encoding& encoding) : encoding(encoding) {}
+        explicit source(Encoding& encoding_) : encoding(encoding_) {}
 
         template <typename Range>
-        void set_input(const std::string& filename, const Range& r)
+        void set_input(const std::string& filename_, const Range& r)
         {
-            this->filename = filename;
+            this->filename = filename_;
             cur = r.begin();
             end = r.end();
             line = 1;
@@ -107,9 +107,9 @@
     class number_callback_adapter
     {
     public:
-        number_callback_adapter(Callbacks& callbacks, Encoding& encoding,
-                                Iterator& cur)
-            : callbacks(callbacks), encoding(encoding), first(cur), cur(cur)
+        number_callback_adapter(Callbacks& callbacks_, Encoding& encoding_,
+                                Iterator& cur_)
+            : callbacks(callbacks_), encoding(encoding_), first(cur_), cur(cur_)
         {}
 
         void operator ()(typename Encoding::external_char) {}
@@ -132,9 +132,9 @@
                                   std::input_iterator_tag>
     {
     public:
-        number_callback_adapter(Callbacks& callbacks, Encoding& encoding,
+        number_callback_adapter(Callbacks& callbacks_, Encoding& encoding_,
                                 Iterator&)
-            : callbacks(callbacks), encoding(encoding), first(true)
+            : callbacks(callbacks_), encoding(encoding_), first(true)
         {}
 
         void operator ()(typename Encoding::external_char c) {
@@ -162,10 +162,10 @@
     class string_callback_adapter
     {
     public:
-        string_callback_adapter(Callbacks& callbacks, Encoding& encoding,
-                                Iterator& cur)
-            : callbacks(callbacks), encoding(encoding), cur(cur),
-              run_begin(cur)
+        string_callback_adapter(Callbacks& callbacks_, Encoding& encoding_,
+                                Iterator& cur_)
+            : callbacks(callbacks_), encoding(encoding_), cur(cur_),
+              run_begin(cur_)
         {}
 
         void start_run() {
@@ -195,9 +195,9 @@
                                   std::input_iterator_tag>
     {
     public:
-        string_callback_adapter(Callbacks& callbacks, Encoding& encoding,
-                                Iterator& cur)
-            : callbacks(callbacks), encoding(encoding), cur(cur)
+        string_callback_adapter(Callbacks& callbacks_, Encoding& encoding_,
+                                Iterator& cur_)
+            : callbacks(callbacks_), encoding(encoding_), cur(cur_)
         {}
 
         void start_run() {}
@@ -232,8 +232,8 @@
 		typedef typename source::code_unit code_unit;
 
 	public:
-		parser(Callbacks& callbacks, Encoding& encoding)
-			: callbacks(callbacks), encoding(encoding), src(encoding)
+		parser(Callbacks& callbacks_, Encoding& encoding_)
+			: callbacks(callbacks_), encoding(encoding_), src(encoding_)
 		{}
 
 		template <typename Range>
diff --git a/external/boost/boost_1_59_0.property_tree.wtype-limits.patch b/external/boost/boost_1_59_0.property_tree.wtype-limits.patch
new file mode 100644
index 0000000..d8426c3
--- /dev/null
+++ b/external/boost/boost_1_59_0.property_tree.wtype-limits.patch
@@ -0,0 +1,19 @@
This patch fixes the following warning, issued by GCC 4.8.1 20130909 compiler:

In member function ‘char boost::property_tree::json_parser::detail::utf8_utf8_encoding::to_internal_trivial(char) const’:
workdir/UnpackedTarball/boost/boost/property_tree/detail/json_parser/narrow_encoding.hpp:71:25: warning:
comparison is always true due to limited range of data type [-Wtype-limits]
             assert(c <= 0x7f);

diff -ru boost.orig/boost/property_tree/detail/json_parser/narrow_encoding.hpp boost/boost/property_tree/detail/json_parser/narrow_encoding.hpp
--- foo/misc/boost.orig/boost/property_tree/detail/json_parser/narrow_encoding.hpp	2015-07-07 14:20:48.000000000 +0200
+++ foo/misc/boost/boost/property_tree/detail/json_parser/narrow_encoding.hpp	2015-07-19 11:55:28.268931551 +0200
@@ -68,7 +68,7 @@
         }
 
         char to_internal_trivial(char c) const {
-            assert(c <= 0x7f);
+	  //assert(c <= 0x7f);
             return c;
         }
 
diff --git a/external/boost/boost_1_59_0.rational.wshadow.patch b/external/boost/boost_1_59_0.rational.wshadow.patch
new file mode 100644
index 0000000..dcca867
--- /dev/null
+++ b/external/boost/boost_1_59_0.rational.wshadow.patch
@@ -0,0 +1,12 @@
diff -ru boost.orig/boost/rational.hpp boost/boost/rational.hpp
--- foo/misc/boost.orig/boost/rational.hpp	2015-01-29 15:06:21.000000000 +0100
+++ foo/misc/boost/boost/rational.hpp	2015-07-19 12:45:44.193897654 +0200
@@ -110,7 +110,7 @@
 {
 public:
     explicit bad_rational() : std::domain_error("bad rational: zero denominator") {}
-    explicit bad_rational( char const *what ) : std::domain_error( what ) {}
+    explicit bad_rational( char const *what_ ) : std::domain_error( what_ ) {}
 };
 
 template <typename IntType>
diff --git a/external/boost/boost_1_59_0.signal2.wshadow.patch b/external/boost/boost_1_59_0.signal2.wshadow.patch
new file mode 100644
index 0000000..1c13e94
--- /dev/null
+++ b/external/boost/boost_1_59_0.signal2.wshadow.patch
@@ -0,0 +1,63 @@
diff -ru boost.orig/boost/signals2/connection.hpp boost/boost/signals2/connection.hpp
--- foo/misc/boost.orig/boost/signals2/connection.hpp	2015-07-09 20:06:58.000000000 +0200
+++ foo/misc/boost/boost/signals2/connection.hpp	2015-07-19 21:54:54.491994554 +0200
@@ -68,12 +68,12 @@
           nolock_disconnect(local_lock);
         }
         template<typename Mutex>
-        void nolock_disconnect(garbage_collecting_lock<Mutex> &lock) const
+        void nolock_disconnect(garbage_collecting_lock<Mutex> &lock_) const
         {
           if(_connected)
           {
             _connected = false;
-            dec_slot_refcount(lock);
+            dec_slot_refcount(lock_);
           }
         }
         virtual bool connected() const = 0;
@@ -118,12 +118,12 @@
         // shared_ptr to the slot in the garbage collecting lock,
         // which will destroy the slot only after it unlocks.
         template<typename Mutex>
-        void dec_slot_refcount(garbage_collecting_lock<Mutex> &lock) const
+        void dec_slot_refcount(garbage_collecting_lock<Mutex> &lock_arg) const
         {
           BOOST_ASSERT(m_slot_refcount != 0);
           if(--m_slot_refcount == 0)
           {
-            lock.add_trash(release_slot());
+            lock_arg.add_trash(release_slot());
           }
         }
 
@@ -155,17 +155,17 @@
         const GroupKey& group_key() const {return _group_key;}
         void set_group_key(const GroupKey &key) {_group_key = key;}
         template<typename M>
-        void disconnect_expired_slot(garbage_collecting_lock<M> &lock)
+        void disconnect_expired_slot(garbage_collecting_lock<M> &lock_arg)
         {
           if(!m_slot) return;
           bool expired = slot().expired();
           if(expired == true)
           {
-            nolock_disconnect(lock);
+            nolock_disconnect(lock_arg);
           }
         }
         template<typename M, typename OutputIterator>
-        void nolock_grab_tracked_objects(garbage_collecting_lock<M> &lock,
+        void nolock_grab_tracked_objects(garbage_collecting_lock<M> &lock_arg,
           OutputIterator inserter) const
         {
           if(!m_slot) return;
@@ -184,7 +184,7 @@
             );
             if(apply_visitor(detail::expired_weak_ptr_visitor(), *it))
             {
-              nolock_disconnect(lock);
+              nolock_disconnect(lock_arg);
               return;
             }
             *inserter++ = locked_object;
diff --git a/external/boost/boost_1_59_0.type_index.wshadow.patch b/external/boost/boost_1_59_0.type_index.wshadow.patch
new file mode 100644
index 0000000..e9be940
--- /dev/null
+++ b/external/boost/boost_1_59_0.type_index.wshadow.patch
@@ -0,0 +1,15 @@
diff -ru boost.orig/boost/type_index/type_index_facade.hpp boost/boost/type_index/type_index_facade.hpp
--- foo/misc/boost.orig/boost/type_index/type_index_facade.hpp	2015-07-19 11:39:38.476942225 +0200
+++ foo/misc/boost/boost/type_index/type_index_facade.hpp	2015-07-19 11:41:13.032941163 +0200
@@ -105,8 +105,8 @@
     /// \return Hash code of a type. By default hashes types by raw_name().
     /// \note <boost/functional/hash.hpp> has to be included if this function is used.
     inline std::size_t hash_code() const BOOST_NOEXCEPT {
-        const char* const name = derived().raw_name();
-        return boost::hash_range(name, name + std::strlen(name));
+        const char* const name_ = derived().raw_name();
+        return boost::hash_range(name_, name_ + std::strlen(name_));
     }
 
 #if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)

diff --git a/external/boost/boost_1_59_0.unique_ptr.wshadow.patch b/external/boost/boost_1_59_0.unique_ptr.wshadow.patch
new file mode 100644
index 0000000..2121d0d
--- /dev/null
+++ b/external/boost/boost_1_59_0.unique_ptr.wshadow.patch
@@ -0,0 +1,14 @@
diff -ru boost.orig/boost/move/unique_ptr.hpp boost/boost/move/unique_ptr.hpp
--- foo/misc/boost.orig/boost/move/unique_ptr.hpp	2015-07-19 13:02:01.788886667 +0200
+++ foo/misc/boost/boost/move/unique_ptr.hpp	2015-07-19 13:02:34.385886300 +0200
@@ -105,8 +105,8 @@
    {}
 
    template <class U>
-   unique_ptr_data(P p, BOOST_FWD_REF(U) d) BOOST_NOEXCEPT
-      : m_p(p), d(::boost::forward<U>(d))
+   unique_ptr_data(P p, BOOST_FWD_REF(U) d_) BOOST_NOEXCEPT
+      : m_p(p), d(::boost::forward<U>(d_))
    {}
 
    del_ref deleter()       { return d; }
diff --git a/external/boost/w4702.patch.0 b/external/boost/w4702.patch.0
deleted file mode 100644
index 74391fe..0000000
--- a/external/boost/w4702.patch.0
+++ /dev/null
@@ -1,10 +0,0 @@
--- boost/signals2/detail/variadic_slot_invoker.hpp
+++ boost/signals2/detail/variadic_slot_invoker.hpp
@@ -115,7 +115,6 @@
           const void_type *) const
         {
           return call_with_tuple_args<result_type>()(connectionBody->slot.slot_function(), _args, mpl::size_t<sizeof...(Args)>());
-          return void_type();
         }
         template<typename ConnectionBodyType>
           result_type m_invoke(const ConnectionBodyType &connectionBody, ...) const
diff --git a/solenv/gbuild/platform/com_MSC_defs.mk b/solenv/gbuild/platform/com_MSC_defs.mk
index e02b581..79165ea 100644
--- a/solenv/gbuild/platform/com_MSC_defs.mk
+++ b/solenv/gbuild/platform/com_MSC_defs.mk
@@ -44,6 +44,7 @@ endif
# like std::copy, std::transform (when MSVC_USE_DEBUG_RUNTIME is enabled)

gb_COMPILERDEFS := \
	-DBOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE \
	-D_CRT_NON_CONFORMING_SWPRINTFS \
	-D_CRT_NONSTDC_NO_DEPRECATE \
	-D_CRT_SECURE_NO_DEPRECATE \