Fix gsl/util for c++20 compilers without <span> (#993)

For instance, clang 10 sets __cplusplus >= 202002L yet does not have span, which causes build errors:

https://gcc.godbolt.org/z/Yq345zGea
This commit is contained in:
Jean-Michaël Celerier 2021-09-16 00:12:11 +02:00 committed by GitHub
parent 8a4b9ed0bf
commit f09b24970d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -25,9 +25,12 @@
#include <type_traits> // for is_signed, integral_constant #include <type_traits> // for is_signed, integral_constant
#include <utility> // for exchange, forward #include <utility> // for exchange, forward
#if defined(__cplusplus) && __cplusplus >= 202002L #if defined(__has_include) && __has_include(<version>)
#include <version>
#if defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
#include <span> #include <span>
#endif // __cplusplus >= 202002L #endif // __cpp_lib_span >= 202002L
#endif //__has_include(<version>)
#if defined(_MSC_VER) && !defined(__clang__) #if defined(_MSC_VER) && !defined(__clang__)
@ -138,14 +141,14 @@ GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
return *(cont.begin() + i); return *(cont.begin() + i);
} }
#if defined(__cplusplus) && __cplusplus >= 202002L #if defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
template <class T, size_t extent = std::dynamic_extent> template <class T, size_t extent = std::dynamic_extent>
constexpr auto at(std::span<T, extent> sp, const index i) constexpr auto at(std::span<T, extent> sp, const index i)
{ {
Expects(i >= 0 && i < narrow_cast<i>(sp.size())); Expects(i >= 0 && i < narrow_cast<i>(sp.size()));
return sp[i]; return sp[i];
} }
#endif // __cplusplus >= 202002L #endif // __cpp_lib_span >= 202002L
} // namespace gsl } // namespace gsl
#if defined(_MSC_VER) && !defined(__clang__) #if defined(_MSC_VER) && !defined(__clang__)