Update gsl-lite to v0.39.0

This commit is contained in:
Carles Fernandez 2021-10-02 02:32:18 +02:00
parent 2c9358b9b4
commit 3800ac4c21
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
33 changed files with 160 additions and 98 deletions

View File

@ -30,6 +30,8 @@ All notable changes to GNSS-SDR will be documented in this file.
- Rewritten Viterbi decoder for Galileo navigation messages: encapsulated in a - Rewritten Viterbi decoder for Galileo navigation messages: encapsulated in a
class instead of being implemented as free inline functions. This improves class instead of being implemented as free inline functions. This improves
memory management. memory management.
- Update GSL implementation to v0.39.0. See
https://github.com/gsl-lite/gsl-lite/releases/tag/v0.39.0
### Improvements in Reliability ### Improvements in Reliability

View File

@ -31,7 +31,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -28,7 +28,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -28,7 +28,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -29,7 +29,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -28,7 +28,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -28,7 +28,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -34,7 +34,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -29,7 +29,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -30,7 +30,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -28,7 +28,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -30,7 +30,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -29,7 +29,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -32,7 +32,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -28,7 +28,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -29,7 +29,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -28,7 +28,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -30,7 +30,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -29,7 +29,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -64,7 +64,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -25,7 +25,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -25,7 +25,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -26,7 +26,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -28,7 +28,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -27,7 +27,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -25,7 +25,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -25,7 +25,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -26,7 +26,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -24,7 +24,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -24,7 +24,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -25,7 +25,7 @@
#include <span> #include <span>
namespace own = std; namespace own = std;
#else #else
#include <gsl/gsl> #include <gsl/gsl-lite.hpp>
namespace own = gsl; namespace own = gsl;
#endif #endif

View File

@ -15,6 +15,8 @@
#ifndef GSL_GSL_H_INCLUDED #ifndef GSL_GSL_H_INCLUDED
#define GSL_GSL_H_INCLUDED #define GSL_GSL_H_INCLUDED
#pragma message ("gsl/gsl is deprecated since version 0.38.1, use gsl/gsl-lite.hpp instead.")
#include "gsl-lite.hpp" #include "gsl-lite.hpp"
#endif // GSL_GSL_H_INCLUDED #endif // GSL_GSL_H_INCLUDED

View File

@ -24,8 +24,8 @@
#include <utility> // for move(), forward<>(), swap() #include <utility> // for move(), forward<>(), swap()
#define gsl_lite_MAJOR 0 #define gsl_lite_MAJOR 0
#define gsl_lite_MINOR 38 #define gsl_lite_MINOR 39
#define gsl_lite_PATCH 1 #define gsl_lite_PATCH 0
#define gsl_lite_VERSION gsl_STRINGIFY(gsl_lite_MAJOR) "." gsl_STRINGIFY(gsl_lite_MINOR) "." gsl_STRINGIFY(gsl_lite_PATCH) #define gsl_lite_VERSION gsl_STRINGIFY(gsl_lite_MAJOR) "." gsl_STRINGIFY(gsl_lite_MINOR) "." gsl_STRINGIFY(gsl_lite_PATCH)
@ -459,7 +459,8 @@
// AppleClang 11.0.0 __apple_build_version__ == 11000033 gsl_COMPILER_APPLECLANG_VERSION == 1100 (Xcode 11.1, 11.2, 11.3, 11.3.1) (LLVM 8.0.0) // AppleClang 11.0.0 __apple_build_version__ == 11000033 gsl_COMPILER_APPLECLANG_VERSION == 1100 (Xcode 11.1, 11.2, 11.3, 11.3.1) (LLVM 8.0.0)
// AppleClang 11.0.3 __apple_build_version__ == 11030032 gsl_COMPILER_APPLECLANG_VERSION == 1103 (Xcode 11.4, 11.4.1, 11.5, 11.6) (LLVM 9.0.0) // AppleClang 11.0.3 __apple_build_version__ == 11030032 gsl_COMPILER_APPLECLANG_VERSION == 1103 (Xcode 11.4, 11.4.1, 11.5, 11.6) (LLVM 9.0.0)
// AppleClang 12.0.0 __apple_build_version__ == 12000032 gsl_COMPILER_APPLECLANG_VERSION == 1200 (Xcode 12.012.4) (LLVM 10.0.0) // AppleClang 12.0.0 __apple_build_version__ == 12000032 gsl_COMPILER_APPLECLANG_VERSION == 1200 (Xcode 12.012.4) (LLVM 10.0.0)
// AppleClang 12.0.5 __apple_build_version__ == 12050022 gsl_COMPILER_APPLECLANG_VERSION == 1205 (Xcode 12.5) (LLVM 10.0.0) // AppleClang 12.0.5 __apple_build_version__ == 12050022 gsl_COMPILER_APPLECLANG_VERSION == 1205 (Xcode 12.5) (LLVM 11.1.0)
// AppleClang 13.0.0 __apple_build_version__ == 13000029 gsl_COMPILER_APPLECLANG_VERSION == 1300 (Xcode 13.0) (LLVM 12.0.0)
#if defined(__apple_build_version__) #if defined(__apple_build_version__)
#define gsl_COMPILER_APPLECLANG_VERSION gsl_COMPILER_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__) #define gsl_COMPILER_APPLECLANG_VERSION gsl_COMPILER_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
@ -472,7 +473,7 @@
#define gsl_COMPILER_CLANG_VERSION 0 #define gsl_COMPILER_CLANG_VERSION 0
#endif #endif
#if defined(__GNUC__) && !defined(__clang__) #if defined(__GNUC__) && !defined(__clang__) && !defined(__NVCOMPILER)
#define gsl_COMPILER_GNUC_VERSION gsl_COMPILER_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) #define gsl_COMPILER_GNUC_VERSION gsl_COMPILER_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
#else #else
#define gsl_COMPILER_GNUC_VERSION 0 #define gsl_COMPILER_GNUC_VERSION 0
@ -484,6 +485,13 @@
#define gsl_COMPILER_NVCC_VERSION 0 #define gsl_COMPILER_NVCC_VERSION 0
#endif #endif
// NVHPC 21.2 gsl_COMPILER_NVHPC_VERSION == 2120
#if defined(__NVCOMPILER)
#define gsl_COMPILER_NVHPC_VERSION gsl_COMPILER_VERSION(__NVCOMPILER_MAJOR__, __NVCOMPILER_MINOR__, __NVCOMPILER_PATCHLEVEL__)
#else
#define gsl_COMPILER_NVHPC_VERSION 0
#endif
#if defined(__ARMCC_VERSION) #if defined(__ARMCC_VERSION)
#define gsl_COMPILER_ARMCC_VERSION (__ARMCC_VERSION / 10000) #define gsl_COMPILER_ARMCC_VERSION (__ARMCC_VERSION / 10000)
#define gsl_COMPILER_ARMCC_VERSION_FULL __ARMCC_VERSION #define gsl_COMPILER_ARMCC_VERSION_FULL __ARMCC_VERSION
@ -544,8 +552,8 @@
#define gsl_HAVE_EXCEPTIONS 0 #define gsl_HAVE_EXCEPTIONS 0
#endif #endif
#endif #endif
#elif gsl_COMPILER_GNUC_VERSION #elif defined(__GNUC__)
#if gsl_BETWEEN(gsl_COMPILER_GNUC_VERSION, 1, 500) #if __GNUC__ < 5
#ifdef __EXCEPTIONS #ifdef __EXCEPTIONS
#define gsl_HAVE_EXCEPTIONS 1 #define gsl_HAVE_EXCEPTIONS 1
#else #else
@ -557,7 +565,7 @@
#else #else
#define gsl_HAVE_EXCEPTIONS 0 #define gsl_HAVE_EXCEPTIONS 0
#endif // __cpp_exceptions #endif // __cpp_exceptions
#endif // gsl_BETWEEN(gsl_COMPILER_GNUC_VERSION, 1, 500) #endif // __GNUC__ < 5
#elif gsl_COMPILER_MSVC_VERSION #elif gsl_COMPILER_MSVC_VERSION
#ifdef _CPPUNWIND #ifdef _CPPUNWIND
#define gsl_HAVE_EXCEPTIONS 1 #define gsl_HAVE_EXCEPTIONS 1
@ -833,7 +841,7 @@
#define gsl_NORETURN [[noreturn]] #define gsl_NORETURN [[noreturn]]
#elif defined(_MSC_VER) #elif defined(_MSC_VER)
#define gsl_NORETURN __declspec(noreturn) #define gsl_NORETURN __declspec(noreturn)
#elif gsl_COMPILER_GNUC_VERSION || gsl_COMPILER_CLANG_VERSION || gsl_COMPILER_APPLECLANG_VERSION || gsl_COMPILER_ARMCC_VERSION #elif defined(__GNUC__) || gsl_COMPILER_ARMCC_VERSION
#define gsl_NORETURN __attribute__((noreturn)) #define gsl_NORETURN __attribute__((noreturn))
#else #else
#define gsl_NORETURN #define gsl_NORETURN
@ -1036,7 +1044,7 @@
#include <intrin.h> #include <intrin.h>
#endif #endif
#if gsl_HAVE(ENUM_CLASS) && gsl_COMPILER_ARMCC_VERSION #if gsl_HAVE(ENUM_CLASS) && (gsl_COMPILER_ARMCC_VERSION || gsl_COMPILER_NVHPC_VERSION) && !defined(_WIN32)
#include <endian.h> #include <endian.h>
#endif #endif
@ -1062,7 +1070,7 @@ namespace detail
extern "C" char *__cdecl _getptd(); extern "C" char *__cdecl _getptd();
} }
} // namespace gsl } // namespace gsl
#elif gsl_COMPILER_CLANG_VERSION || gsl_COMPILER_GNUC_VERSION || gsl_COMPILER_APPLECLANG_VERSION #elif gsl_COMPILER_CLANG_VERSION || gsl_COMPILER_GNUC_VERSION || gsl_COMPILER_APPLECLANG_VERSION || gsl_COMPILER_NVHPC_VERSION
#if defined(__GLIBCXX__) || defined(__GLIBCPP__) // libstdc++: prototype from cxxabi.h #if defined(__GLIBCXX__) || defined(__GLIBCPP__) // libstdc++: prototype from cxxabi.h
#include <cxxabi.h> #include <cxxabi.h>
#elif !defined(BOOST_CORE_UNCAUGHT_EXCEPTIONS_HPP_INCLUDED_) // libc++: prototype from Boost? #elif !defined(BOOST_CORE_UNCAUGHT_EXCEPTIONS_HPP_INCLUDED_) // libc++: prototype from Boost?
@ -1138,7 +1146,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
// C++98 emulation: // C++98 emulation:
namespace std98 namespace detail
{ {
// We implement `equal()` and `lexicographical_compare()` here to avoid having to pull in the <algorithm> header. // We implement `equal()` and `lexicographical_compare()` here to avoid having to pull in the <algorithm> header.
template <class InputIt1, class InputIt2> template <class InputIt1, class InputIt2>
@ -1163,7 +1171,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
return first1 == last1 && first2 != last2; return first1 == last1 && first2 != last2;
} }
} // namespace std98 } // namespace detail
// C++11 emulation: // C++11 emulation:
@ -1320,6 +1328,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD std::unique_ptr<T> gsl_NODISCARD std::unique_ptr<T>
make_unique(Args &&...args) make_unique(Args &&...args)
{ {
#if gsl_HAVE(TYPE_TRAITS)
static_assert(!std::is_array<T>::value, "make_unique<T[]>() is not part of C++14");
#endif
return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
} }
@ -1492,7 +1503,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
little = __ORDER_LITTLE_ENDIAN__, little = __ORDER_LITTLE_ENDIAN__,
big = __ORDER_BIG_ENDIAN__, big = __ORDER_BIG_ENDIAN__,
native = __BYTE_ORDER__ native = __BYTE_ORDER__
#elif gsl_COMPILER_ARMCC_VERSION #elif gsl_COMPILER_ARMCC_VERSION || gsl_COMPILER_NVHPC_VERSION
// from <endian.h> header file // from <endian.h> header file
little = __LITTLE_ENDIAN, little = __LITTLE_ENDIAN,
big = __BIG_ENDIAN, big = __BIG_ENDIAN,
@ -1707,12 +1718,8 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
// GSL.owner: ownership pointers // GSL.owner: ownership pointers
// //
#if gsl_HAVE(SHARED_PTR) #if gsl_HAVE(SHARED_PTR)
using std::make_shared;
using std::shared_ptr; using std::shared_ptr;
using std::unique_ptr; using std::unique_ptr;
#if gsl_HAVE(MAKE_UNIQUE) || gsl_HAVE(VARIADIC_TEMPLATE)
using std14::make_unique;
#endif
#endif #endif
#if gsl_HAVE(ALIAS_TEMPLATE) #if gsl_HAVE(ALIAS_TEMPLATE)
@ -1806,6 +1813,15 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
#endif #endif
#endif // defined( gsl_CONFIG_CONTRACT_VIOLATION_TRAPS ) #endif // defined( gsl_CONFIG_CONTRACT_VIOLATION_TRAPS )
#if gsl_COMPILER_NVHPC_VERSION
// Suppress "controlling expression is constant" warning when using gsl_Expects,
// gsl_Ensures, gsl_Assert, gsl_FailFast and so on.
#define gsl_SUPPRESS_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_ _Pragma("diag_suppress 236")
#define gsl_RESTORE_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_ _Pragma("diag_default 236")
#else
#define gsl_SUPPRESS_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_
#define gsl_RESTORE_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_
#endif
#if defined(gsl_CONFIG_CONTRACT_VIOLATION_CALLS_HANDLER) #if defined(gsl_CONFIG_CONTRACT_VIOLATION_CALLS_HANDLER)
#define gsl_CONTRACT_CHECK_(str, x) ((x) ? static_cast<void>(0) : ::gsl::fail_fast_assert_handler(#x, str, __FILE__, __LINE__)) #define gsl_CONTRACT_CHECK_(str, x) ((x) ? static_cast<void>(0) : ::gsl::fail_fast_assert_handler(#x, str, __FILE__, __LINE__))
#if defined(__CUDACC__) && defined(__CUDA_ARCH__) #if defined(__CUDACC__) && defined(__CUDA_ARCH__)
@ -1821,9 +1837,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
#endif #endif
#define gsl_FAILFAST_() (__trap()) #define gsl_FAILFAST_() (__trap())
#elif defined(gsl_CONFIG_CONTRACT_VIOLATION_ASSERTS) #elif defined(gsl_CONFIG_CONTRACT_VIOLATION_ASSERTS)
#define gsl_CONTRACT_CHECK_(str, x) assert(str && (x)) #define gsl_CONTRACT_CHECK_(str, x) gsl_SUPPRESS_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_ assert(str && (x)) gsl_RESTORE_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_
#if !defined(NDEBUG) #if !defined(NDEBUG)
#define gsl_FAILFAST_() (assert(!"GSL: failure"), ::gsl::detail::fail_fast_terminate()) #define gsl_FAILFAST_() (gsl_SUPPRESS_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_ assert(!"GSL: failure") gsl_RESTORE_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_, ::gsl::detail::fail_fast_terminate())
#else #else
#define gsl_FAILFAST_() (::gsl::detail::fail_fast_terminate()) #define gsl_FAILFAST_() (::gsl::detail::fail_fast_terminate())
#endif #endif
@ -1835,10 +1851,10 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
#define gsl_FAILFAST_() (gsl_TRAP_()) #define gsl_FAILFAST_() (gsl_TRAP_())
#endif #endif
#elif defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS) #elif defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
#define gsl_CONTRACT_CHECK_(str, x) ((x) ? static_cast<void>(0) : ::gsl::detail::fail_fast_throw(str ": '" #x "' at " __FILE__ ":" gsl_STRINGIFY(__LINE__))) #define gsl_CONTRACT_CHECK_(str, x) gsl_SUPPRESS_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_((x) ? static_cast<void>(0) : ::gsl::detail::fail_fast_throw(str ": '" #x "' at " __FILE__ ":" gsl_STRINGIFY(__LINE__))) gsl_RESTORE_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_
#define gsl_FAILFAST_() (::gsl::detail::fail_fast_throw("GSL: failure at " __FILE__ ":" gsl_STRINGIFY(__LINE__))) #define gsl_FAILFAST_() (::gsl::detail::fail_fast_throw("GSL: failure at " __FILE__ ":" gsl_STRINGIFY(__LINE__)))
#else // defined( gsl_CONFIG_CONTRACT_VIOLATION_TERMINATES ) [default] #else // defined( gsl_CONFIG_CONTRACT_VIOLATION_TERMINATES ) [default]
#define gsl_CONTRACT_CHECK_(str, x) ((x) ? static_cast<void>(0) : ::gsl::detail::fail_fast_terminate()) #define gsl_CONTRACT_CHECK_(str, x) gsl_SUPPRESS_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_((x) ? static_cast<void>(0) : ::gsl::detail::fail_fast_terminate()) gsl_RESTORE_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_
#define gsl_FAILFAST_() (::gsl::detail::fail_fast_terminate()) #define gsl_FAILFAST_() (::gsl::detail::fail_fast_terminate())
#endif #endif
@ -1965,7 +1981,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
return static_cast<unsigned char>(*reinterpret_cast<unsigned const *>(detail::_getptd() + (sizeof(void *) == 8 ? 0x100 : 0x90))); return static_cast<unsigned char>(*reinterpret_cast<unsigned const *>(detail::_getptd() + (sizeof(void *) == 8 ? 0x100 : 0x90)));
} }
#elif gsl_COMPILER_CLANG_VERSION || gsl_COMPILER_GNUC_VERSION || gsl_COMPILER_APPLECLANG_VERSION #elif gsl_COMPILER_CLANG_VERSION || gsl_COMPILER_GNUC_VERSION || gsl_COMPILER_APPLECLANG_VERSION || gsl_COMPILER_NVHPC_VERSION
inline unsigned char uncaught_exceptions() gsl_noexcept inline unsigned char uncaught_exceptions() gsl_noexcept
{ {
@ -2271,7 +2287,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
{ {
}; };
#if gsl_COMPILER_NVCC_VERSION #if gsl_COMPILER_NVCC_VERSION || gsl_COMPILER_NVHPC_VERSION
// We do this to circumvent NVCC warnings about pointless unsigned comparisons with 0. // We do this to circumvent NVCC warnings about pointless unsigned comparisons with 0.
template <class T> template <class T>
gsl_constexpr gsl_api bool is_negative(T value, std::true_type /*isSigned*/) gsl_noexcept gsl_constexpr gsl_api bool is_negative(T value, std::true_type /*isSigned*/) gsl_noexcept
@ -2293,7 +2309,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
{ {
return detail::is_negative(t, std::is_signed<T>()) == detail::is_negative(u, std::is_signed<U>()); return detail::is_negative(t, std::is_signed<T>()) == detail::is_negative(u, std::is_signed<U>());
} }
#endif // gsl_COMPILER_NVCC_VERSION #endif // gsl_COMPILER_NVCC_VERSION || gsl_COMPILER_NVHPC_VERSION
} // namespace detail } // namespace detail
@ -2326,14 +2342,24 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
} }
#if gsl_HAVE(TYPE_TRAITS) #if gsl_HAVE(TYPE_TRAITS)
#if gsl_COMPILER_NVCC_VERSION #if gsl_COMPILER_NVCC_VERSION || gsl_COMPILER_NVHPC_VERSION
if (!detail::have_same_sign(t, u, detail::is_same_signedness<T, U>())) if (!detail::have_same_sign(t, u, detail::is_same_signedness<T, U>()))
#else #else
gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") if (!detail::is_same_signedness<T, U>::value && (t < T()) != (u < U())) gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") if (!detail::is_same_signedness<T, U>::value && (t < T()) != (u < U()))
#endif #endif
#else #else
// Don't assume T() works: // Don't assume T() works:
gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") if ((t < 0) != (u < 0)) gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant")
#if gsl_COMPILER_NVHPC_VERSION
// Suppress: pointless comparison of unsigned integer with zero.
#pragma diag_suppress 186
#endif
if ((t < 0) != (u < 0))
#if gsl_COMPILER_NVHPC_VERSION
// Restore: pointless comparison of unsigned integer with zero.
#pragma diag_default 186
#endif
#endif #endif
{ {
#if gsl_HAVE(EXCEPTIONS) && (gsl_CONFIG(NARROW_THROWS_ON_TRUNCATION) || defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)) #if gsl_HAVE(EXCEPTIONS) && (gsl_CONFIG(NARROW_THROWS_ON_TRUNCATION) || defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS))
@ -2355,7 +2381,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_Expects(static_cast<U>(t) == u); gsl_Expects(static_cast<U>(t) == u);
#if gsl_HAVE(TYPE_TRAITS) #if gsl_HAVE(TYPE_TRAITS)
#if gsl_COMPILER_NVCC_VERSION #if gsl_COMPILER_NVCC_VERSION || gsl_COMPILER_NVHPC_VERSION
gsl_Expects(::gsl::detail::have_same_sign(t, u, ::gsl::detail::is_same_signedness<T, U>())); gsl_Expects(::gsl::detail::have_same_sign(t, u, ::gsl::detail::is_same_signedness<T, U>()));
#else #else
gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant")
@ -2364,7 +2390,15 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
#else #else
// Don't assume T() works: // Don't assume T() works:
gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant")
#if gsl_COMPILER_NVHPC_VERSION
// Suppress: pointless comparison of unsigned integer with zero.
#pragma diag_suppress 186
#endif
gsl_Expects((t < 0) == (u < 0)); gsl_Expects((t < 0) == (u < 0));
#if gsl_COMPILER_NVHPC_VERSION
// Restore: pointless comparison of unsigned integer with zero.
#pragma diag_default 186
#endif
#endif #endif
return t; return t;
@ -2723,26 +2757,23 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD gsl_api gsl_constexpr14 element_type * gsl_NODISCARD gsl_api gsl_constexpr14 element_type *
get() const get() const
{ {
element_type *result = data_.ptr_.get(); gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return data_.ptr_.get();
return result;
} }
#else #else
#if gsl_CONFIG(NOT_NULL_GET_BY_CONST_REF) #if gsl_CONFIG(NOT_NULL_GET_BY_CONST_REF)
gsl_NODISCARD gsl_api gsl_constexpr14 T const & gsl_NODISCARD gsl_api gsl_constexpr14 T const &
get() const get() const
{ {
T const &result = data_.ptr_; gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return data_.ptr_;
return result;
} }
#else #else
gsl_NODISCARD gsl_api gsl_constexpr14 T gsl_NODISCARD gsl_api gsl_constexpr14 T
get() const get() const
{ {
T result = data_.ptr_; gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return data_.ptr_;
return result;
} }
#endif #endif
#endif #endif
@ -2789,9 +2820,8 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
& &
#endif #endif
{ {
U result(data_.ptr_); gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return U(data_.ptr_);
return result;
} }
#if gsl_HAVE(FUNCTION_REF_QUALIFIER) #if gsl_HAVE(FUNCTION_REF_QUALIFIER)
template <class U template <class U
@ -2801,9 +2831,8 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD gsl_api gsl_constexpr14 explicit gsl_NODISCARD gsl_api gsl_constexpr14 explicit
operator U() && operator U() &&
{ {
U result(std::move(data_.ptr_)); gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return U(std::move(data_.ptr_));
return result;
} }
#endif #endif
@ -2818,9 +2847,8 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
& &
#endif #endif
{ {
U result(data_.ptr_); gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return data_.ptr_;
return result;
} }
#if gsl_HAVE(FUNCTION_REF_QUALIFIER) #if gsl_HAVE(FUNCTION_REF_QUALIFIER)
template <class U template <class U
@ -2830,9 +2858,8 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD gsl_api gsl_constexpr14 gsl_NODISCARD gsl_api gsl_constexpr14
operator U() && operator U() &&
{ {
U result(std::move(data_.ptr_)); gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return std::move(data_.ptr_);
return result;
} }
#endif #endif
#else // a.k.a. #if !( gsl_HAVE( MOVE_FORWARD ) && gsl_HAVE( TYPE_TRAITS ) && gsl_HAVE( DEFAULT_FUNCTION_TEMPLATE_ARG ) && gsl_HAVE( EXPLICIT ) ) #else // a.k.a. #if !( gsl_HAVE( MOVE_FORWARD ) && gsl_HAVE( TYPE_TRAITS ) && gsl_HAVE( DEFAULT_FUNCTION_TEMPLATE_ARG ) && gsl_HAVE( EXPLICIT ) )
@ -2840,24 +2867,22 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD gsl_api gsl_constexpr14 gsl_NODISCARD gsl_api gsl_constexpr14
operator U() const operator U() const
{ {
U result(data_.ptr_); gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return U(data_.ptr_);
return result;
} }
#endif // gsl_HAVE( MOVE_FORWARD ) && gsl_HAVE( TYPE_TRAITS ) && gsl_HAVE( DEFAULT_FUNCTION_TEMPLATE_ARG ) && gsl_HAVE( EXPLICIT ) #endif // gsl_HAVE( MOVE_FORWARD ) && gsl_HAVE( TYPE_TRAITS ) && gsl_HAVE( DEFAULT_FUNCTION_TEMPLATE_ARG ) && gsl_HAVE( EXPLICIT )
gsl_NODISCARD gsl_api gsl_constexpr14 T const & gsl_NODISCARD gsl_api gsl_constexpr14 T const &
operator->() const operator->() const
{ {
T const &result(data_.ptr_); gsl_Assert(data_.ptr_ != gsl_nullptr);
gsl_Ensures(result != gsl_nullptr); return data_.ptr_;
return result;
} }
gsl_NODISCARD gsl_api gsl_constexpr14 element_type & gsl_NODISCARD gsl_api gsl_constexpr14 element_type &
operator*() const operator*() const
{ {
gsl_Expects(data_.ptr_ != gsl_nullptr); gsl_Assert(data_.ptr_ != gsl_nullptr);
return *data_.ptr_; return *data_.ptr_;
} }
@ -3381,6 +3406,36 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
} }
#if gsl_HAVE(VARIADIC_TEMPLATE)
#if gsl_HAVE(UNIQUE_PTR)
template <class T, class... Args>
gsl_NODISCARD not_null<std::unique_ptr<T>>
make_unique(Args && ...args)
{
#if gsl_HAVE(TYPE_TRAITS)
static_assert(!std::is_array<T>::value,
"gsl::make_unique<T>() returns `gsl::not_null<std::unique_ptr<T>>`, which is not "
"defined for array types because the Core Guidelines advise against pointer arithmetic, cf. \"Bounds safety profile\".");
#endif
return not_null<std::unique_ptr<T>>(new T(std::forward<Args>(args)...));
}
#endif // gsl_HAVE( UNIQUE_PTR )
#if gsl_HAVE(SHARED_PTR)
template <class T, class... Args>
gsl_NODISCARD not_null<std::shared_ptr<T>>
make_shared(Args && ...args)
{
#if gsl_HAVE(TYPE_TRAITS)
static_assert(!std::is_array<T>::value,
"gsl::make_shared<T>() returns `gsl::not_null<std::shared_ptr<T>>`, which is not "
"defined for array types because the Core Guidelines advise against pointer arithmetic, cf. \"Bounds safety profile\".");
#endif
return not_null<std::shared_ptr<T>>(std::make_shared<T>(std::forward<Args>(args)...));
}
#endif // gsl_HAVE( SHARED_PTR )
#endif // gsl_HAVE( VARIADIC_TEMPLATE )
// //
// Byte-specific type. // Byte-specific type.
// //
@ -4069,7 +4124,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD inline gsl_constexpr bool gsl_NODISCARD inline gsl_constexpr bool
operator==(span<T> const &l, span<U> const &r) operator==(span<T> const &l, span<U> const &r)
{ {
return l.size() == r.size() && (l.begin() == r.begin() || std98::equal(l.begin(), l.end(), r.begin())); return l.size() == r.size() && (l.begin() == r.begin() || detail::equal(l.begin(), l.end(), r.begin()));
} }
template <class T, class U> template <class T, class U>
@ -4077,7 +4132,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD inline gsl_constexpr bool gsl_NODISCARD inline gsl_constexpr bool
operator<(span<T> const &l, span<U> const &r) operator<(span<T> const &l, span<U> const &r)
{ {
return std98::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end()); return detail::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
} }
#else // a.k.a. !gsl_CONFIG( ALLOWS_NONSTRICT_SPAN_COMPARISON ) #else // a.k.a. !gsl_CONFIG( ALLOWS_NONSTRICT_SPAN_COMPARISON )
@ -4087,7 +4142,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD inline gsl_constexpr bool gsl_NODISCARD inline gsl_constexpr bool
operator==(span<T> const &l, span<T> const &r) operator==(span<T> const &l, span<T> const &r)
{ {
return l.size() == r.size() && (l.begin() == r.begin() || std98::equal(l.begin(), l.end(), r.begin())); return l.size() == r.size() && (l.begin() == r.begin() || detail::equal(l.begin(), l.end(), r.begin()));
} }
template <class T> template <class T>
@ -4095,7 +4150,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD inline gsl_constexpr bool gsl_NODISCARD inline gsl_constexpr bool
operator<(span<T> const &l, span<T> const &r) operator<(span<T> const &l, span<T> const &r)
{ {
return std98::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end()); return detail::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
} }
#endif // gsl_CONFIG( ALLOWS_NONSTRICT_SPAN_COMPARISON ) #endif // gsl_CONFIG( ALLOWS_NONSTRICT_SPAN_COMPARISON )
@ -4728,7 +4783,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
{ {
const basic_string_span<typename std11::add_const<T>::type> r(u); const basic_string_span<typename std11::add_const<T>::type> r(u);
return l.size() == r.size() && std98::equal(l.begin(), l.end(), r.begin()); return l.size() == r.size() && detail::equal(l.begin(), l.end(), r.begin());
} }
template <class T, class U> template <class T, class U>
@ -4738,7 +4793,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
{ {
const basic_string_span<typename std11::add_const<T>::type> r(u); const basic_string_span<typename std11::add_const<T>::type> r(u);
return std98::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end()); return detail::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
} }
#if gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG) #if gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG)
@ -4751,7 +4806,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
{ {
const basic_string_span<typename std11::add_const<T>::type> l(u); const basic_string_span<typename std11::add_const<T>::type> l(u);
return l.size() == r.size() && std98::equal(l.begin(), l.end(), r.begin()); return l.size() == r.size() && detail::equal(l.begin(), l.end(), r.begin());
} }
template <class T, class U template <class T, class U
@ -4762,7 +4817,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
{ {
const basic_string_span<typename std11::add_const<T>::type> l(u); const basic_string_span<typename std11::add_const<T>::type> l(u);
return std98::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end()); return detail::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
} }
#endif #endif
@ -4773,7 +4828,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD inline gsl_constexpr14 bool gsl_NODISCARD inline gsl_constexpr14 bool
operator==(basic_string_span<T> const &l, basic_string_span<T> const &r) gsl_noexcept operator==(basic_string_span<T> const &l, basic_string_span<T> const &r) gsl_noexcept
{ {
return l.size() == r.size() && std98::equal(l.begin(), l.end(), r.begin()); return l.size() == r.size() && detail::equal(l.begin(), l.end(), r.begin());
} }
template <class T> template <class T>
@ -4781,7 +4836,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
gsl_NODISCARD inline gsl_constexpr14 bool gsl_NODISCARD inline gsl_constexpr14 bool
operator<(basic_string_span<T> const &l, basic_string_span<T> const &r) gsl_noexcept operator<(basic_string_span<T> const &l, basic_string_span<T> const &r) gsl_noexcept
{ {
return std98::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end()); return detail::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
} }
#endif // gsl_CONFIG( ALLOWS_NONSTRICT_SPAN_COMPARISON ) #endif // gsl_CONFIG( ALLOWS_NONSTRICT_SPAN_COMPARISON )
@ -5247,16 +5302,19 @@ namespace std17 = ::gsl::std17;
namespace std20 = ::gsl::std20; namespace std20 = ::gsl::std20;
using namespace std11; using namespace std11;
using namespace std14; //using namespace std14; // contains only make_unique<>(), which is superseded by `gsl::make_unique<>()`
using namespace std17; using namespace std17;
using namespace std20; using namespace std20;
using namespace ::gsl::detail::no_adl; using namespace ::gsl::detail::no_adl;
#if gsl_HAVE(SHARED_PTR) #if gsl_HAVE(UNIQUE_PTR) && gsl_HAVE(SHARED_PTR)
using std::make_shared;
using std::shared_ptr; using std::shared_ptr;
using std::unique_ptr; using std::unique_ptr;
#if gsl_HAVE(VARIADIC_TEMPLATE)
using ::gsl::make_shared;
using ::gsl::make_unique;
#endif
#endif #endif
using ::gsl::diff; using ::gsl::diff;