diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 19a8fce08..1d658fcf1 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -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 class instead of being implemented as free inline functions. This improves 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 diff --git a/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc index 03224a4d5..d7566c0f8 100644 --- a/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc @@ -31,7 +31,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc index 8128b8825..58a9a602a 100644 --- a/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc @@ -28,7 +28,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc index fa780d2b2..69fae3408 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc @@ -28,7 +28,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc index 984bacd3e..2c1f21e08 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc @@ -29,7 +29,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.cc index 5a69d845b..501db7689 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.cc @@ -28,7 +28,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc index 626f9d91d..83072a4dd 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc @@ -28,7 +28,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc b/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc index 40a9e948d..60fc1c031 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc @@ -34,7 +34,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc index 5711a8dbf..a0625b277 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc @@ -29,7 +29,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition.cc index 5f515a8ab..4b5b63c0e 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition.cc @@ -30,7 +30,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/galileo_e6_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e6_pcps_acquisition.cc index cb892cdc2..942c83a21 100644 --- a/src/algorithms/acquisition/adapters/galileo_e6_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e6_pcps_acquisition.cc @@ -28,7 +28,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc index b0fe5d076..d75d66675 100644 --- a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc @@ -30,7 +30,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc index 62f2a2f4e..c2a578abb 100644 --- a/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc @@ -29,7 +29,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc index 5e4b37428..71c0cb9f6 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc @@ -32,7 +32,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc index bfb9b4d75..a277d5314 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc @@ -28,7 +28,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc index ae3ec0e71..ed2366907 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc @@ -29,7 +29,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc index 6886cfe5d..d120d9877 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc @@ -28,7 +28,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc index 0ba3fcb1c..7198250db 100644 --- a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc @@ -30,7 +30,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc index 353bfb28e..e34a0086b 100644 --- a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc @@ -29,7 +29,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.h b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.h index 924ce64b5..dd793c0e7 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.h +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.h @@ -64,7 +64,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/beidou_b1i_signal_replica.h b/src/algorithms/libs/beidou_b1i_signal_replica.h index b5be0a8c3..ec7ca37f6 100644 --- a/src/algorithms/libs/beidou_b1i_signal_replica.h +++ b/src/algorithms/libs/beidou_b1i_signal_replica.h @@ -25,7 +25,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/beidou_b3i_signal_replica.h b/src/algorithms/libs/beidou_b3i_signal_replica.h index ad3dd017f..4ac1282b6 100644 --- a/src/algorithms/libs/beidou_b3i_signal_replica.h +++ b/src/algorithms/libs/beidou_b3i_signal_replica.h @@ -25,7 +25,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/galileo_e1_signal_replica.h b/src/algorithms/libs/galileo_e1_signal_replica.h index 29c64e54c..642663bae 100644 --- a/src/algorithms/libs/galileo_e1_signal_replica.h +++ b/src/algorithms/libs/galileo_e1_signal_replica.h @@ -26,7 +26,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/galileo_e5_signal_replica.h b/src/algorithms/libs/galileo_e5_signal_replica.h index 8c7c0f7df..fb3869021 100644 --- a/src/algorithms/libs/galileo_e5_signal_replica.h +++ b/src/algorithms/libs/galileo_e5_signal_replica.h @@ -28,7 +28,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/galileo_e6_signal_replica.h b/src/algorithms/libs/galileo_e6_signal_replica.h index dd927e932..079dd8ed3 100644 --- a/src/algorithms/libs/galileo_e6_signal_replica.h +++ b/src/algorithms/libs/galileo_e6_signal_replica.h @@ -27,7 +27,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/glonass_l1_signal_replica.h b/src/algorithms/libs/glonass_l1_signal_replica.h index 1965b2f0d..afbb29cf1 100644 --- a/src/algorithms/libs/glonass_l1_signal_replica.h +++ b/src/algorithms/libs/glonass_l1_signal_replica.h @@ -25,7 +25,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/glonass_l2_signal_replica.h b/src/algorithms/libs/glonass_l2_signal_replica.h index 3b09e5c46..e90af99c5 100644 --- a/src/algorithms/libs/glonass_l2_signal_replica.h +++ b/src/algorithms/libs/glonass_l2_signal_replica.h @@ -25,7 +25,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/gnss_signal_replica.h b/src/algorithms/libs/gnss_signal_replica.h index 2c8254388..a4e7bca6f 100644 --- a/src/algorithms/libs/gnss_signal_replica.h +++ b/src/algorithms/libs/gnss_signal_replica.h @@ -26,7 +26,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/gps_l2c_signal_replica.h b/src/algorithms/libs/gps_l2c_signal_replica.h index 1d1ae3ff4..f9c21c237 100644 --- a/src/algorithms/libs/gps_l2c_signal_replica.h +++ b/src/algorithms/libs/gps_l2c_signal_replica.h @@ -24,7 +24,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/gps_l5_signal_replica.h b/src/algorithms/libs/gps_l5_signal_replica.h index f89b7a65b..0a32d55fe 100644 --- a/src/algorithms/libs/gps_l5_signal_replica.h +++ b/src/algorithms/libs/gps_l5_signal_replica.h @@ -24,7 +24,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/gps_sdr_signal_replica.h b/src/algorithms/libs/gps_sdr_signal_replica.h index bb3b243de..7fd93cd06 100644 --- a/src/algorithms/libs/gps_sdr_signal_replica.h +++ b/src/algorithms/libs/gps_sdr_signal_replica.h @@ -25,7 +25,7 @@ #include namespace own = std; #else -#include +#include namespace own = gsl; #endif diff --git a/src/algorithms/libs/gsl/include/gsl/gsl b/src/algorithms/libs/gsl/include/gsl/gsl index d17b7921d..b511f579b 100644 --- a/src/algorithms/libs/gsl/include/gsl/gsl +++ b/src/algorithms/libs/gsl/include/gsl/gsl @@ -15,6 +15,8 @@ #ifndef 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" #endif // GSL_GSL_H_INCLUDED diff --git a/src/algorithms/libs/gsl/include/gsl/gsl-lite.hpp b/src/algorithms/libs/gsl/include/gsl/gsl-lite.hpp index ff5ec4973..2afbdb27c 100644 --- a/src/algorithms/libs/gsl/include/gsl/gsl-lite.hpp +++ b/src/algorithms/libs/gsl/include/gsl/gsl-lite.hpp @@ -24,8 +24,8 @@ #include // for move(), forward<>(), swap() #define gsl_lite_MAJOR 0 -#define gsl_lite_MINOR 38 -#define gsl_lite_PATCH 1 +#define gsl_lite_MINOR 39 +#define gsl_lite_PATCH 0 #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.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.0–12.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__) #define gsl_COMPILER_APPLECLANG_VERSION gsl_COMPILER_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__) @@ -472,7 +473,7 @@ #define gsl_COMPILER_CLANG_VERSION 0 #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__) #else #define gsl_COMPILER_GNUC_VERSION 0 @@ -484,6 +485,13 @@ #define gsl_COMPILER_NVCC_VERSION 0 #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) #define gsl_COMPILER_ARMCC_VERSION (__ARMCC_VERSION / 10000) #define gsl_COMPILER_ARMCC_VERSION_FULL __ARMCC_VERSION @@ -544,8 +552,8 @@ #define gsl_HAVE_EXCEPTIONS 0 #endif #endif -#elif gsl_COMPILER_GNUC_VERSION -#if gsl_BETWEEN(gsl_COMPILER_GNUC_VERSION, 1, 500) +#elif defined(__GNUC__) +#if __GNUC__ < 5 #ifdef __EXCEPTIONS #define gsl_HAVE_EXCEPTIONS 1 #else @@ -557,7 +565,7 @@ #else #define gsl_HAVE_EXCEPTIONS 0 #endif // __cpp_exceptions -#endif // gsl_BETWEEN(gsl_COMPILER_GNUC_VERSION, 1, 500) +#endif // __GNUC__ < 5 #elif gsl_COMPILER_MSVC_VERSION #ifdef _CPPUNWIND #define gsl_HAVE_EXCEPTIONS 1 @@ -833,7 +841,7 @@ #define gsl_NORETURN [[noreturn]] #elif defined(_MSC_VER) #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)) #else #define gsl_NORETURN @@ -1036,7 +1044,7 @@ #include #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 #endif @@ -1062,7 +1070,7 @@ namespace detail extern "C" char *__cdecl _getptd(); } } // 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 #include #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: - namespace std98 + namespace detail { // We implement `equal()` and `lexicographical_compare()` here to avoid having to pull in the header. template @@ -1163,7 +1171,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 return first1 == last1 && first2 != last2; } - } // namespace std98 + } // namespace detail // 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 make_unique(Args &&...args) { +#if gsl_HAVE(TYPE_TRAITS) + static_assert(!std::is_array::value, "make_unique() is not part of C++14"); +#endif return std::unique_ptr(new T(std::forward(args)...)); } @@ -1492,7 +1503,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 little = __ORDER_LITTLE_ENDIAN__, big = __ORDER_BIG_ENDIAN__, native = __BYTE_ORDER__ -#elif gsl_COMPILER_ARMCC_VERSION +#elif gsl_COMPILER_ARMCC_VERSION || gsl_COMPILER_NVHPC_VERSION // from header file little = __LITTLE_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 // #if gsl_HAVE(SHARED_PTR) - using std::make_shared; using std::shared_ptr; using std::unique_ptr; -#if gsl_HAVE(MAKE_UNIQUE) || gsl_HAVE(VARIADIC_TEMPLATE) - using std14::make_unique; -#endif #endif #if gsl_HAVE(ALIAS_TEMPLATE) @@ -1806,6 +1813,15 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 #endif #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) #define gsl_CONTRACT_CHECK_(str, x) ((x) ? static_cast(0) : ::gsl::fail_fast_assert_handler(#x, str, __FILE__, __LINE__)) #if defined(__CUDACC__) && defined(__CUDA_ARCH__) @@ -1821,9 +1837,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 #endif #define gsl_FAILFAST_() (__trap()) #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) -#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 #define gsl_FAILFAST_() (::gsl::detail::fail_fast_terminate()) #endif @@ -1835,10 +1851,10 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 #define gsl_FAILFAST_() (gsl_TRAP_()) #endif #elif defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS) -#define gsl_CONTRACT_CHECK_(str, x) ((x) ? static_cast(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(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__))) #else // defined( gsl_CONFIG_CONTRACT_VIOLATION_TERMINATES ) [default] -#define gsl_CONTRACT_CHECK_(str, x) ((x) ? static_cast(0) : ::gsl::detail::fail_fast_terminate()) +#define gsl_CONTRACT_CHECK_(str, x) gsl_SUPPRESS_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_((x) ? static_cast(0) : ::gsl::detail::fail_fast_terminate()) gsl_RESTORE_NVHPC_CONTROLLING_EXPRESSION_IS_CONSTANT_ #define gsl_FAILFAST_() (::gsl::detail::fail_fast_terminate()) #endif @@ -1965,7 +1981,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 return static_cast(*reinterpret_cast(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 { @@ -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. template 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()) == detail::is_negative(u, std::is_signed()); } -#endif // gsl_COMPILER_NVCC_VERSION +#endif // gsl_COMPILER_NVCC_VERSION || gsl_COMPILER_NVHPC_VERSION } // 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_COMPILER_NVCC_VERSION +#if gsl_COMPILER_NVCC_VERSION || gsl_COMPILER_NVHPC_VERSION if (!detail::have_same_sign(t, u, detail::is_same_signedness())) #else gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") if (!detail::is_same_signedness::value && (t < T()) != (u < U())) #endif #else // 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 { #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(t) == u); #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())); #else 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 // Don't assume T() works: 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)); +#if gsl_COMPILER_NVHPC_VERSION + // Restore: pointless comparison of unsigned integer with zero. +#pragma diag_default 186 +#endif #endif 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 * get() const { - element_type *result = data_.ptr_.get(); - gsl_Ensures(result != gsl_nullptr); - return result; + gsl_Assert(data_.ptr_ != gsl_nullptr); + return data_.ptr_.get(); } #else #if gsl_CONFIG(NOT_NULL_GET_BY_CONST_REF) gsl_NODISCARD gsl_api gsl_constexpr14 T const & get() const { - T const &result = data_.ptr_; - gsl_Ensures(result != gsl_nullptr); - return result; + gsl_Assert(data_.ptr_ != gsl_nullptr); + return data_.ptr_; } #else gsl_NODISCARD gsl_api gsl_constexpr14 T get() const { - T result = data_.ptr_; - gsl_Ensures(result != gsl_nullptr); - return result; + gsl_Assert(data_.ptr_ != gsl_nullptr); + return data_.ptr_; } #endif #endif @@ -2789,9 +2820,8 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 & #endif { - U result(data_.ptr_); - gsl_Ensures(result != gsl_nullptr); - return result; + gsl_Assert(data_.ptr_ != gsl_nullptr); + return U(data_.ptr_); } #if gsl_HAVE(FUNCTION_REF_QUALIFIER) template () const { - T const &result(data_.ptr_); - gsl_Ensures(result != gsl_nullptr); - return result; + gsl_Assert(data_.ptr_ != gsl_nullptr); + return data_.ptr_; } gsl_NODISCARD gsl_api gsl_constexpr14 element_type & operator*() const { - gsl_Expects(data_.ptr_ != gsl_nullptr); + gsl_Assert(data_.ptr_ != gsl_nullptr); 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 + gsl_NODISCARD not_null> + make_unique(Args && ...args) + { +#if gsl_HAVE(TYPE_TRAITS) + static_assert(!std::is_array::value, + "gsl::make_unique() returns `gsl::not_null>`, which is not " + "defined for array types because the Core Guidelines advise against pointer arithmetic, cf. \"Bounds safety profile\"."); +#endif + return not_null>(new T(std::forward(args)...)); + } +#endif // gsl_HAVE( UNIQUE_PTR ) +#if gsl_HAVE(SHARED_PTR) + template + gsl_NODISCARD not_null> + make_shared(Args && ...args) + { +#if gsl_HAVE(TYPE_TRAITS) + static_assert(!std::is_array::value, + "gsl::make_shared() returns `gsl::not_null>`, which is not " + "defined for array types because the Core Guidelines advise against pointer arithmetic, cf. \"Bounds safety profile\"."); +#endif + return not_null>(std::make_shared(std::forward(args)...)); + } +#endif // gsl_HAVE( SHARED_PTR ) +#endif // gsl_HAVE( VARIADIC_TEMPLATE ) + + // // 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 operator==(span const &l, span 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 @@ -4077,7 +4132,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 gsl_NODISCARD inline gsl_constexpr bool operator<(span const &l, span 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 ) @@ -4087,7 +4142,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 gsl_NODISCARD inline gsl_constexpr bool operator==(span const &l, span 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 @@ -4095,7 +4150,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 gsl_NODISCARD inline gsl_constexpr bool operator<(span const &l, span 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 ) @@ -4728,7 +4783,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 { const basic_string_span::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 @@ -4738,7 +4793,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 { const basic_string_span::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) @@ -4751,7 +4806,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 { const basic_string_span::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 ::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 @@ -4773,7 +4828,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 gsl_NODISCARD inline gsl_constexpr14 bool operator==(basic_string_span const &l, basic_string_span 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 @@ -4781,7 +4836,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473 gsl_NODISCARD inline gsl_constexpr14 bool operator<(basic_string_span const &l, basic_string_span 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 ) @@ -5247,16 +5302,19 @@ namespace std17 = ::gsl::std17; namespace std20 = ::gsl::std20; 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 std20; using namespace ::gsl::detail::no_adl; -#if gsl_HAVE(SHARED_PTR) -using std::make_shared; +#if gsl_HAVE(UNIQUE_PTR) && gsl_HAVE(SHARED_PTR) using std::shared_ptr; using std::unique_ptr; +#if gsl_HAVE(VARIADIC_TEMPLATE) +using ::gsl::make_shared; +using ::gsl::make_unique; +#endif #endif using ::gsl::diff;