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
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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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

View File

@ -24,8 +24,8 @@
#include <utility> // 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.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__)
#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 <intrin.h>
#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>
#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 <cxxabi.h>
#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 <algorithm> header.
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;
}
} // 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<T>
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)...));
}
@ -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 <endian.h> 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<void>(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<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__)))
#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())
#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)));
}
#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 <class T>
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>());
}
#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<T, U>()))
#else
gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") if (!detail::is_same_signedness<T, U>::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<U>(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<T, U>()));
#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 <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
operator U() &&
{
U result(std::move(data_.ptr_));
gsl_Ensures(result != gsl_nullptr);
return result;
gsl_Assert(data_.ptr_ != gsl_nullptr);
return U(std::move(data_.ptr_));
}
#endif
@ -2818,9 +2847,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 data_.ptr_;
}
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
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
operator U() &&
{
U result(std::move(data_.ptr_));
gsl_Ensures(result != gsl_nullptr);
return result;
gsl_Assert(data_.ptr_ != gsl_nullptr);
return std::move(data_.ptr_);
}
#endif
#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
operator U() const
{
U result(data_.ptr_);
gsl_Ensures(result != gsl_nullptr);
return result;
gsl_Assert(data_.ptr_ != gsl_nullptr);
return U(data_.ptr_);
}
#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 &
operator->() 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 <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.
//
@ -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<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>
@ -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<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 )
@ -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<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>
@ -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<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 )
@ -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);
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>
@ -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);
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<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
@ -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);
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<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>
@ -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<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 )
@ -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;