From 5f6bb283fb1c1cf4a565ecea8c2b31f1bac7b6aa Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 23 Feb 2025 18:35:31 +0200 Subject: [PATCH] Disable constexpr under GCC 4.x when there's BOOST_ASSERT --- include/boost/core/span.hpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/include/boost/core/span.hpp b/include/boost/core/span.hpp index d15e762..1039d67 100644 --- a/include/boost/core/span.hpp +++ b/include/boost/core/span.hpp @@ -10,10 +10,18 @@ Distributed under the Boost Software License, Version 1.0. #include #include +#include +#include #include #include #include +#if BOOST_WORKAROUND(BOOST_GCC, < 50000) +# define BOOST_CORE_SPAN_CONSTEXPR +#else +# define BOOST_CORE_SPAN_CONSTEXPR constexpr +#endif + namespace boost { constexpr std::size_t dynamic_extent = static_cast(-1); @@ -274,17 +282,17 @@ public: return span(s_.p + O, C); } - constexpr span first(size_type c) const { + BOOST_CORE_SPAN_CONSTEXPR span first(size_type c) const { return BOOST_ASSERT(c <= size()), span(s_.p, c); } - constexpr span last(size_type c) const { + BOOST_CORE_SPAN_CONSTEXPR span last(size_type c) const { return BOOST_ASSERT(c <= size()), span(s_.p + (s_.n - c), c); } - constexpr span subspan(size_type o, + BOOST_CORE_SPAN_CONSTEXPR span subspan(size_type o, size_type c = dynamic_extent) const { return BOOST_ASSERT(o <= size() && (c == dynamic_extent || c + o <= size())), @@ -304,15 +312,15 @@ public: return s_.n == 0; } - constexpr reference operator[](size_type i) const { + BOOST_CORE_SPAN_CONSTEXPR reference operator[](size_type i) const { return BOOST_ASSERT(i < size()), s_.p[i]; } - constexpr reference front() const { + BOOST_CORE_SPAN_CONSTEXPR reference front() const { return BOOST_ASSERT(!empty()), *s_.p; } - constexpr reference back() const { + BOOST_CORE_SPAN_CONSTEXPR reference back() const { return BOOST_ASSERT(!empty()), s_.p[s_.n - 1]; } @@ -403,4 +411,6 @@ as_writable_bytes(span s) noexcept } /* boost */ +#undef BOOST_CORE_SPAN_CONSTEXPR + #endif