-/* Copyright 2006-2008 Joaquin M Lopez Munoz.
+/* Copyright 2006-2018 Joaquin M Lopez Munoz.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
#include <boost/detail/workaround.hpp>
#if BOOST_WORKAROUND(__GNUC__, <4)||\
- BOOST_WORKAROUND(__GNUC__,==4)&&(__GNUC_MINOR__<2)
+ BOOST_WORKAROUND(__GNUC__,==4)&&(__GNUC_MINOR__<2)||\
+ BOOST_WORKAROUND(__GNUC__, ==7)&&( __cplusplus>=201703L)||\
+ BOOST_WORKAROUND(__GNUC__, >=8)&&( __cplusplus>=201103L)
/* The default trick on which the macro is based, namely adding a int=0
* defaulted template parameter, does not work in GCC prior to 4.2 due to
* an unfortunate compiler non-standard extension, as explained in
* http://lists.boost.org/boost-users/2007/07/29866.php
- * We resort to an uglier technique, adding defaulted template parameters
- * so as to exceed BOOST_MPL_LIMIT_METAFUNCTION_ARITY.
+ * As it happens, GCC 7 in C++17 mode and GCC 8 (and presumably later) in
+ * C++11 mode (and presumably later) go back to this old behavior, anticipating
+ * the resolution of CWG DR 150 (see P0522R0).
+ * In these cases we resort to an uglier technique, adding defaulted template
+ * parameters so as to exceed BOOST_MPL_LIMIT_METAFUNCTION_ARITY.
*/
#include <boost/mpl/limits/arity.hpp>