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