mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-11-10 20:10:05 +00:00
Update gsl-lite version to 0.37.0
This commit is contained in:
parent
cda1be81e5
commit
1745b71f13
@ -27,7 +27,9 @@ SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc
|
|||||||
- The software can now be cross-compiled on Petalinux environments.
|
- The software can now be cross-compiled on Petalinux environments.
|
||||||
- Fixes building with GCC 10 (gcc-10 and above flipped a default from `-fcommon`
|
- Fixes building with GCC 10 (gcc-10 and above flipped a default from `-fcommon`
|
||||||
to `-fno-common`, causing an error due to multiple defined lambda functions).
|
to `-fno-common`, causing an error due to multiple defined lambda functions).
|
||||||
- Make use of `std::span` if the compiler supports it.
|
- Make use of `std::span` if the compiler supports it, and use gsl-lite as a
|
||||||
|
fallback. The latter has been updated to version
|
||||||
|
[0.37.0](https://github.com/gsl-lite/gsl-lite/releases/tag/0.37.0).
|
||||||
|
|
||||||
### Improvements in Reliability:
|
### Improvements in Reliability:
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//
|
//
|
||||||
// gsl-lite is based on GSL: Guidelines Support Library.
|
// gsl-lite is based on GSL: Guidelines Support Library.
|
||||||
// For more information see https://github.com/martinmoene/gsl-lite
|
// For more information see https://github.com/gsl-lite/gsl-lite
|
||||||
//
|
//
|
||||||
// Copyright (c) 2015-2018 Martin Moene
|
// Copyright (c) 2015-2018 Martin Moene
|
||||||
// Copyright (c) 2015-2018 Microsoft Corporation. All rights reserved.
|
// Copyright (c) 2015-2018 Microsoft Corporation. All rights reserved.
|
||||||
@ -25,7 +25,7 @@
|
|||||||
#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 36
|
#define gsl_lite_MINOR 37
|
||||||
#define gsl_lite_PATCH 0
|
#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)
|
||||||
@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
#ifndef gsl_CONFIG_DEPRECATE_TO_LEVEL
|
#ifndef gsl_CONFIG_DEPRECATE_TO_LEVEL
|
||||||
#if gsl_CONFIG_DEFAULTS_VERSION >= 1
|
#if gsl_CONFIG_DEFAULTS_VERSION >= 1
|
||||||
#define gsl_CONFIG_DEPRECATE_TO_LEVEL 5
|
#define gsl_CONFIG_DEPRECATE_TO_LEVEL 6
|
||||||
#else
|
#else
|
||||||
#define gsl_CONFIG_DEPRECATE_TO_LEVEL 0
|
#define gsl_CONFIG_DEPRECATE_TO_LEVEL 0
|
||||||
#endif
|
#endif
|
||||||
@ -146,6 +146,10 @@
|
|||||||
#define gsl_CONFIG_CONFIRMS_COMPILATION_ERRORS 0
|
#define gsl_CONFIG_CONFIRMS_COMPILATION_ERRORS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef gsl_CONFIG_ALLOWS_SPAN_COMPARISON
|
||||||
|
#define gsl_CONFIG_ALLOWS_SPAN_COMPARISON (gsl_CONFIG_DEFAULTS_VERSION == 0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef gsl_CONFIG_ALLOWS_NONSTRICT_SPAN_COMPARISON
|
#ifndef gsl_CONFIG_ALLOWS_NONSTRICT_SPAN_COMPARISON
|
||||||
#define gsl_CONFIG_ALLOWS_NONSTRICT_SPAN_COMPARISON 1
|
#define gsl_CONFIG_ALLOWS_NONSTRICT_SPAN_COMPARISON 1
|
||||||
#endif
|
#endif
|
||||||
@ -154,6 +158,10 @@
|
|||||||
#define gsl_CONFIG_ALLOWS_UNCONSTRAINED_SPAN_CONTAINER_CTOR 0
|
#define gsl_CONFIG_ALLOWS_UNCONSTRAINED_SPAN_CONTAINER_CTOR 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION
|
||||||
|
#define gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION (gsl_CONFIG_DEFAULTS_VERSION >= 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 1 < defined(gsl_CONFIG_CONTRACT_CHECKING_AUDIT) + defined(gsl_CONFIG_CONTRACT_CHECKING_ON) + defined(gsl_CONFIG_CONTRACT_CHECKING_OFF)
|
#if 1 < defined(gsl_CONFIG_CONTRACT_CHECKING_AUDIT) + defined(gsl_CONFIG_CONTRACT_CHECKING_ON) + defined(gsl_CONFIG_CONTRACT_CHECKING_OFF)
|
||||||
#error only one of gsl_CONFIG_CONTRACT_CHECKING_AUDIT, gsl_CONFIG_CONTRACT_CHECKING_ON, and gsl_CONFIG_CONTRACT_CHECKING_OFF may be defined
|
#error only one of gsl_CONFIG_CONTRACT_CHECKING_AUDIT, gsl_CONFIG_CONTRACT_CHECKING_ON, and gsl_CONFIG_CONTRACT_CHECKING_OFF may be defined
|
||||||
#endif
|
#endif
|
||||||
@ -189,7 +197,7 @@
|
|||||||
#define gsl_BETWEEN(v, lo, hi) ((lo) <= (v) && (v) < (hi))
|
#define gsl_BETWEEN(v, lo, hi) ((lo) <= (v) && (v) < (hi))
|
||||||
|
|
||||||
// Compiler versions:
|
// Compiler versions:
|
||||||
//
|
|
||||||
// MSVC++ 6.0 _MSC_VER == 1200 gsl_COMPILER_MSVC_VERSION == 60 (Visual Studio 6.0)
|
// MSVC++ 6.0 _MSC_VER == 1200 gsl_COMPILER_MSVC_VERSION == 60 (Visual Studio 6.0)
|
||||||
// MSVC++ 7.0 _MSC_VER == 1300 gsl_COMPILER_MSVC_VERSION == 70 (Visual Studio .NET 2002)
|
// MSVC++ 7.0 _MSC_VER == 1300 gsl_COMPILER_MSVC_VERSION == 70 (Visual Studio .NET 2002)
|
||||||
// MSVC++ 7.1 _MSC_VER == 1310 gsl_COMPILER_MSVC_VERSION == 71 (Visual Studio .NET 2003)
|
// MSVC++ 7.1 _MSC_VER == 1310 gsl_COMPILER_MSVC_VERSION == 71 (Visual Studio .NET 2003)
|
||||||
@ -201,7 +209,19 @@
|
|||||||
// MSVC++ 14.0 _MSC_VER == 1900 gsl_COMPILER_MSVC_VERSION == 140 (Visual Studio 2015)
|
// MSVC++ 14.0 _MSC_VER == 1900 gsl_COMPILER_MSVC_VERSION == 140 (Visual Studio 2015)
|
||||||
// MSVC++ 14.1 _MSC_VER >= 1910 gsl_COMPILER_MSVC_VERSION == 141 (Visual Studio 2017)
|
// MSVC++ 14.1 _MSC_VER >= 1910 gsl_COMPILER_MSVC_VERSION == 141 (Visual Studio 2017)
|
||||||
// MSVC++ 14.2 _MSC_VER >= 1920 gsl_COMPILER_MSVC_VERSION == 142 (Visual Studio 2019)
|
// MSVC++ 14.2 _MSC_VER >= 1920 gsl_COMPILER_MSVC_VERSION == 142 (Visual Studio 2019)
|
||||||
//
|
|
||||||
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
|
#define gsl_COMPILER_MSVC_VER (_MSC_VER)
|
||||||
|
#define gsl_COMPILER_MSVC_VERSION (_MSC_VER / 10 - 10 * (5 + (_MSC_VER < 1900)))
|
||||||
|
#define gsl_COMPILER_MSVC_VERSION_FULL (_MSC_VER - 100 * (5 + (_MSC_VER < 1900)))
|
||||||
|
#else
|
||||||
|
#define gsl_COMPILER_MSVC_VER 0
|
||||||
|
#define gsl_COMPILER_MSVC_VERSION 0
|
||||||
|
#define gsl_COMPILER_MSVC_VERSION_FULL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define gsl_COMPILER_VERSION(major, minor, patch) (10 * (10 * (major) + (minor)) + (patch))
|
||||||
|
|
||||||
// AppleClang 7.0.0 __apple_build_version__ == 7000172 gsl_COMPILER_APPLECLANG_VERSION == 700 (Xcode 7.0, 7.0.1) (LLVM 3.7.0)
|
// AppleClang 7.0.0 __apple_build_version__ == 7000172 gsl_COMPILER_APPLECLANG_VERSION == 700 (Xcode 7.0, 7.0.1) (LLVM 3.7.0)
|
||||||
// AppleClang 7.0.0 __apple_build_version__ == 7000176 gsl_COMPILER_APPLECLANG_VERSION == 700 (Xcode 7.1) (LLVM 3.7.0)
|
// AppleClang 7.0.0 __apple_build_version__ == 7000176 gsl_COMPILER_APPLECLANG_VERSION == 700 (Xcode 7.1) (LLVM 3.7.0)
|
||||||
// AppleClang 7.0.2 __apple_build_version__ == 7000181 gsl_COMPILER_APPLECLANG_VERSION == 702 (Xcode 7.2, 7.2.1) (LLVM 3.7.0)
|
// AppleClang 7.0.2 __apple_build_version__ == 7000181 gsl_COMPILER_APPLECLANG_VERSION == 702 (Xcode 7.2, 7.2.1) (LLVM 3.7.0)
|
||||||
@ -221,18 +241,6 @@
|
|||||||
// AppleClang 10.0.1 __apple_build_version__ == 10010046 gsl_COMPILER_APPLECLANG_VERSION == 1001 (Xcode 10.2, 10.2.1, 10.3) (LLVM 7.0.0?)
|
// AppleClang 10.0.1 __apple_build_version__ == 10010046 gsl_COMPILER_APPLECLANG_VERSION == 1001 (Xcode 10.2, 10.2.1, 10.3) (LLVM 7.0.0?)
|
||||||
// AppleClang 11.0.0 __apple_build_version__ == 11000033 gsl_COMPILER_APPLECLANG_VERSION == 1100 (Xcode 11.1, 11.2, 11.3) (LLVM 8.0.0?)
|
// AppleClang 11.0.0 __apple_build_version__ == 11000033 gsl_COMPILER_APPLECLANG_VERSION == 1100 (Xcode 11.1, 11.2, 11.3) (LLVM 8.0.0?)
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(__clang__)
|
|
||||||
#define gsl_COMPILER_MSVC_VER (_MSC_VER)
|
|
||||||
#define gsl_COMPILER_MSVC_VERSION (_MSC_VER / 10 - 10 * (5 + (_MSC_VER < 1900)))
|
|
||||||
#define gsl_COMPILER_MSVC_VERSION_FULL (_MSC_VER - 100 * (5 + (_MSC_VER < 1900)))
|
|
||||||
#else
|
|
||||||
#define gsl_COMPILER_MSVC_VER 0
|
|
||||||
#define gsl_COMPILER_MSVC_VERSION 0
|
|
||||||
#define gsl_COMPILER_MSVC_VERSION_FULL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define gsl_COMPILER_VERSION(major, minor, patch) (10 * (10 * (major) + (minor)) + (patch))
|
|
||||||
|
|
||||||
#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__)
|
||||||
#define gsl_COMPILER_CLANG_VERSION 0
|
#define gsl_COMPILER_CLANG_VERSION 0
|
||||||
@ -357,7 +365,7 @@
|
|||||||
|
|
||||||
#define gsl_HAVE_CONSTEXPR_14 (gsl_CPP14_000 && !gsl_BETWEEN(gsl_COMPILER_GNUC_VERSION, 1, 600))
|
#define gsl_HAVE_CONSTEXPR_14 (gsl_CPP14_000 && !gsl_BETWEEN(gsl_COMPILER_GNUC_VERSION, 1, 600))
|
||||||
#define gsl_HAVE_DECLTYPE_AUTO gsl_CPP14_140
|
#define gsl_HAVE_DECLTYPE_AUTO gsl_CPP14_140
|
||||||
#define gsl_HAVE_DEPRECATED gsl_CPP14_140
|
#define gsl_HAVE_DEPRECATED (gsl_CPP14_140 && !gsl_BETWEEN(gsl_COMPILER_MSVC_VERSION, 1, 142))
|
||||||
|
|
||||||
// Presence of C++17 language features:
|
// Presence of C++17 language features:
|
||||||
// MSVC: template parameter deduction guides since Visual Studio 2017 v15.7
|
// MSVC: template parameter deduction guides since Visual Studio 2017 v15.7
|
||||||
@ -380,7 +388,11 @@
|
|||||||
|
|
||||||
#define gsl_HAVE_CONTAINER_DATA_METHOD gsl_CPP11_140_CPP0X_90
|
#define gsl_HAVE_CONTAINER_DATA_METHOD gsl_CPP11_140_CPP0X_90
|
||||||
#define gsl_HAVE_STD_DATA gsl_CPP17_000
|
#define gsl_HAVE_STD_DATA gsl_CPP17_000
|
||||||
#define gsl_HAVE_STD_SSIZE (gsl_COMPILER_GNUC_VERSION >= 1000)
|
#ifdef __cpp_lib_ssize
|
||||||
|
#define gsl_HAVE_STD_SSIZE 1
|
||||||
|
#else
|
||||||
|
#define gsl_HAVE_STD_SSIZE (gsl_COMPILER_GNUC_VERSION >= 1000 && __cplusplus > 201703L)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define gsl_HAVE_SIZED_TYPES gsl_CPP11_140
|
#define gsl_HAVE_SIZED_TYPES gsl_CPP11_140
|
||||||
|
|
||||||
@ -483,10 +495,12 @@
|
|||||||
#define gsl_NORETURN
|
#define gsl_NORETURN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if gsl_HAVE(DEPRECATED)
|
#if gsl_HAVE(DEPRECATED) && !defined(gsl_TESTING_)
|
||||||
#define gsl_DEPRECATED(because) [[deprecated(because)]]
|
#define gsl_DEPRECATED [[deprecated]]
|
||||||
|
#define gsl_DEPRECATED_MSG(msg) [[deprecated(msg)]]
|
||||||
#else
|
#else
|
||||||
#define gsl_DEPRECATED(because)
|
#define gsl_DEPRECATED
|
||||||
|
#define gsl_DEPRECATED_MSG(msg)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if gsl_HAVE(TYPE_TRAITS)
|
#if gsl_HAVE(TYPE_TRAITS)
|
||||||
@ -589,43 +603,27 @@
|
|||||||
|
|
||||||
// Method enabling (C++98, VC120 (VS2013) cannot use __VA_ARGS__)
|
// Method enabling (C++98, VC120 (VS2013) cannot use __VA_ARGS__)
|
||||||
|
|
||||||
// Guidelines for SFINAE in gsl-lite:
|
|
||||||
//
|
|
||||||
// The macros below are for conditional SFINAE, i.e. they apply SFINAE only if the necessary language support is available.
|
|
||||||
// Don't use these macros if language support can be assumed in the given context.
|
|
||||||
//
|
|
||||||
// For functions, prefer return-type SFINAE if possible.
|
|
||||||
// If return-type SFINAE is not applicable, use `gsl_REQUIRES_A_()` or `typename std::enable_if< VA, int >::type = 0` in the function template argument list.
|
|
||||||
//
|
|
||||||
// Use `gsl_REQUIRES_T_()` or `typename = typename std::enable_if< VA, ::gsl::detail::enabler >::type` in class template argument lists.
|
|
||||||
|
|
||||||
#if gsl_HAVE(EXPRESSION_SFINAE)
|
#if gsl_HAVE(EXPRESSION_SFINAE)
|
||||||
#define gsl_DECLTYPE_(T, EXPR) decltype(EXPR)
|
#define gsl_DECLTYPE_(T, EXPR) decltype(EXPR)
|
||||||
#else
|
#else
|
||||||
#define gsl_DECLTYPE_(T, EXPR) T
|
#define gsl_DECLTYPE_(T, EXPR) T
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if gsl_HAVE(TYPE_TRAITS)
|
// NOTE: When using SFINAE in gsl-lite, please note that overloads of function templates must always use SFINAE with non-type default arguments
|
||||||
#define gsl_REQUIRES_T_(VA) , typename = typename std::enable_if<(VA), ::gsl::detail::enabler>::type
|
// as explained in https://en.cppreference.com/w/cpp/types/enable_if#Notes. `gsl_ENABLE_IF_()` implements graceful fallback to default
|
||||||
#else
|
// type arguments (for compilers that don't support non-type default arguments); please verify that this is appropriate in the given
|
||||||
#define gsl_REQUIRES_T_(VA)
|
// situation, and add additional checks if necessary.
|
||||||
#endif
|
//
|
||||||
|
// Also, please note that `gsl_ENABLE_IF_()` doesn't enforce the constraint at all if no compiler/library support is available (i.e. pre-C++11).
|
||||||
#if gsl_HAVE(TYPE_TRAITS)
|
|
||||||
#define gsl_REQUIRES_R_(R, VA) typename std::enable_if<(VA), R>::type
|
|
||||||
#else
|
|
||||||
#define gsl_REQUIRES_R_(R, VA) R
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if gsl_HAVE(TYPE_TRAITS) && gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG)
|
#if gsl_HAVE(TYPE_TRAITS) && gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG)
|
||||||
#if gsl_BETWEEN(gsl_COMPILER_MSVC_VERSION, 1, 140)
|
#if !gsl_BETWEEN(gsl_COMPILER_MSVC_VERSION, 1, 140) // VS 2013 seems to have trouble with SFINAE for default non-type arguments
|
||||||
// VS 2013 and earlier seem to have trouble with SFINAE for default non-type arguments
|
#define gsl_ENABLE_IF_(VA) , typename std::enable_if<(VA), int>::type = 0
|
||||||
#define gsl_REQUIRES_A_(VA) gsl_REQUIRES_T_(VA)
|
|
||||||
#else
|
#else
|
||||||
#define gsl_REQUIRES_A_(VA) , typename std::enable_if<(VA), int>::type = 0
|
#define gsl_ENABLE_IF_(VA) , typename = typename std::enable_if<(VA), ::gsl::detail::enabler>::type
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#define gsl_REQUIRES_A_(VA)
|
#define gsl_ENABLE_IF_(VA)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -1163,7 +1161,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
template <class C, class E>
|
template <class C, class E>
|
||||||
struct is_compatible_element<
|
struct is_compatible_element<
|
||||||
C, E, std17::void_t<decltype(std17::data(std::declval<C>()))> > : std::is_convertible<typename std::remove_pointer<decltype(std17::data(std::declval<C &>()))>::type (*)[], E (*)[]>
|
C, E, std17::void_t<decltype(std17::data(std::declval<C>())), typename std::remove_pointer<decltype(std17::data(std::declval<C &>()))>::type (*)[]> > : std::is_convertible<typename std::remove_pointer<decltype(std17::data(std::declval<C &>()))>::type (*)[], E (*)[]>
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1179,7 +1177,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
#else // gsl_CPP11_140
|
#else // ^^^ gsl_CPP11_140 && ! gsl_BETWEEN( gsl_COMPILER_GNUC_VERSION, 1, 500 ) ^^^ / vvv ! gsl_CPP11_140 || gsl_BETWEEN( gsl_COMPILER_GNUC_VERSION, 1, 500 ) vvv
|
||||||
|
|
||||||
template <
|
template <
|
||||||
class C, class E, typename = typename std::enable_if<!is_span<C>::value && !is_array<C>::value && !is_std_array<C>::value && (std::is_convertible<typename std::remove_pointer<decltype(std17::data(std::declval<C &>()))>::type (*)[], E (*)[]>::value)
|
class C, class E, typename = typename std::enable_if<!is_span<C>::value && !is_array<C>::value && !is_std_array<C>::value && (std::is_convertible<typename std::remove_pointer<decltype(std17::data(std::declval<C &>()))>::type (*)[], E (*)[]>::value)
|
||||||
@ -1187,11 +1185,28 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
,
|
,
|
||||||
enabler>::type,
|
enabler>::type,
|
||||||
class = decltype(std17::size(std::declval<C>())), class = decltype(std17::data(std::declval<C>()))>
|
class = decltype(std17::size(std::declval<C>())), class = decltype(std17::data(std::declval<C>()))>
|
||||||
|
#if gsl_BETWEEN(gsl_COMPILER_MSVC_VERSION, 1, 140)
|
||||||
|
// VS2013 has insufficient support for expression SFINAE; we cannot make `is_compatible_container<>` a proper type trait here
|
||||||
struct is_compatible_container : std::true_type
|
struct is_compatible_container : std::true_type
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
#else
|
||||||
|
struct is_compatible_container_r
|
||||||
|
{
|
||||||
|
is_compatible_container_r(int);
|
||||||
|
};
|
||||||
|
template <class C, class E>
|
||||||
|
std::true_type is_compatible_container_f(is_compatible_container_r<C, E>);
|
||||||
|
template <class C, class E>
|
||||||
|
std::false_type is_compatible_container_f(...);
|
||||||
|
|
||||||
#endif // gsl_CPP11_140
|
template <class C, class E>
|
||||||
|
struct is_compatible_container : decltype(is_compatible_container_f<C, E>(0))
|
||||||
|
{
|
||||||
|
};
|
||||||
|
#endif // gsl_BETWEEN( gsl_COMPILER_MSVC_VERSION, 1, 140 )
|
||||||
|
|
||||||
|
#endif // gsl_CPP11_140 && ! gsl_BETWEEN( gsl_COMPILER_GNUC_VERSION, 1, 500 )
|
||||||
|
|
||||||
#endif // gsl_HAVE( TYPE_TRAITS )
|
#endif // gsl_HAVE( TYPE_TRAITS )
|
||||||
|
|
||||||
@ -1218,7 +1233,11 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
#if gsl_HAVE(ALIAS_TEMPLATE)
|
#if gsl_HAVE(ALIAS_TEMPLATE)
|
||||||
template <class T
|
template <class T
|
||||||
gsl_REQUIRES_T_(std::is_pointer<T>::value)>
|
#if gsl_HAVE(TYPE_TRAITS)
|
||||||
|
,
|
||||||
|
typename = typename std::enable_if<std::is_pointer<T>::value>::type
|
||||||
|
#endif
|
||||||
|
>
|
||||||
using owner = T;
|
using owner = T;
|
||||||
#elif gsl_CONFIG_DEFAULTS_VERSION == 0
|
#elif gsl_CONFIG_DEFAULTS_VERSION == 0
|
||||||
// TODO vNext: remove
|
// TODO vNext: remove
|
||||||
@ -1338,7 +1357,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#if defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
|
#if defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
|
||||||
|
|
||||||
#if gsl_HAVE(EXCEPTIONS)
|
#if gsl_HAVE(EXCEPTIONS)
|
||||||
gsl_DEPRECATED("don't call gsl::fail_fast_assert() directly; use contract checking macros instead") gsl_constexpr14 inline void fail_fast_assert(bool cond, char const *const message)
|
gsl_DEPRECATED_MSG("don't call gsl::fail_fast_assert() directly; use contract checking macros instead")
|
||||||
|
gsl_constexpr14 inline void
|
||||||
|
fail_fast_assert(bool cond, char const *const message)
|
||||||
{
|
{
|
||||||
if (!cond)
|
if (!cond)
|
||||||
throw fail_fast(message);
|
throw fail_fast(message);
|
||||||
@ -1347,7 +1368,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
#elif defined(gsl_CONFIG_CONTRACT_VIOLATION_CALLS_HANDLER)
|
#elif defined(gsl_CONFIG_CONTRACT_VIOLATION_CALLS_HANDLER)
|
||||||
|
|
||||||
gsl_DEPRECATED("don't call gsl::fail_fast_assert() directly; use contract checking macros instead") gsl_api gsl_constexpr14 inline void fail_fast_assert(bool cond, char const *const expression, char const *const message, char const *const file, int line)
|
gsl_DEPRECATED_MSG("don't call gsl::fail_fast_assert() directly; use contract checking macros instead")
|
||||||
|
gsl_api gsl_constexpr14 inline void
|
||||||
|
fail_fast_assert(bool cond, char const *const expression, char const *const message, char const *const file, int line)
|
||||||
{
|
{
|
||||||
if (!cond)
|
if (!cond)
|
||||||
::gsl::fail_fast_assert_handler(expression, message, file, line);
|
::gsl::fail_fast_assert_handler(expression, message, file, line);
|
||||||
@ -1355,7 +1378,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
#else // defined( gsl_CONFIG_CONTRACT_VIOLATION_TERMINATES ) [default]
|
#else // defined( gsl_CONFIG_CONTRACT_VIOLATION_TERMINATES ) [default]
|
||||||
|
|
||||||
gsl_DEPRECATED("don't call gsl::fail_fast_assert() directly; use contract checking macros instead") gsl_constexpr14 inline void fail_fast_assert(bool cond) gsl_noexcept
|
gsl_DEPRECATED_MSG("don't call gsl::fail_fast_assert() directly; use contract checking macros instead")
|
||||||
|
gsl_constexpr14 inline void
|
||||||
|
fail_fast_assert(bool cond) gsl_noexcept
|
||||||
{
|
{
|
||||||
if (!cond)
|
if (!cond)
|
||||||
std::terminate();
|
std::terminate();
|
||||||
@ -1686,22 +1711,22 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#if defined(__NVCC__)
|
#if defined(__NVCC__)
|
||||||
// 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 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
|
||||||
{
|
{
|
||||||
return value < T();
|
return value < T();
|
||||||
}
|
}
|
||||||
template <class T>
|
template <class T>
|
||||||
gsl_constexpr std::false_type is_negative(T /*value*/, std::false_type /*isUnsigned*/) gsl_noexcept
|
gsl_constexpr gsl_api bool is_negative(T /*value*/, std::false_type /*isUnsigned*/) gsl_noexcept
|
||||||
{
|
{
|
||||||
return std::false_type();
|
return false;
|
||||||
}
|
}
|
||||||
template <class T, class U>
|
template <class T, class U>
|
||||||
gsl_constexpr std::true_type have_same_sign(T t, U u, std::true_type /*isSameSignedness*/) gsl_noexcept
|
gsl_constexpr gsl_api bool have_same_sign(T t, U u, std::true_type /*isSameSignedness*/) gsl_noexcept
|
||||||
{
|
{
|
||||||
return std::true_type();
|
return true;
|
||||||
}
|
}
|
||||||
template <class T, class U>
|
template <class T, class U>
|
||||||
gsl_constexpr bool have_same_sign(T t, U u, std::false_type /*isSameSignedness*/) gsl_noexcept
|
gsl_constexpr gsl_api bool have_same_sign(T t, U u, std::false_type /*isSameSignedness*/) gsl_noexcept
|
||||||
{
|
{
|
||||||
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>());
|
||||||
}
|
}
|
||||||
@ -1711,10 +1736,11 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if gsl_HAVE(EXCEPTIONS) || !gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION
|
||||||
template <class T, class U>
|
template <class T, class U>
|
||||||
#if !defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
|
#if !gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION && !defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
|
||||||
gsl_api
|
gsl_api
|
||||||
#endif // !defined( gsl_CONFIG_CONTRACT_VIOLATION_THROWS )
|
#endif // !gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION && !defined( gsl_CONFIG_CONTRACT_VIOLATION_THROWS )
|
||||||
inline T
|
inline T
|
||||||
narrow(U u)
|
narrow(U u)
|
||||||
{
|
{
|
||||||
@ -1722,7 +1748,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
if (static_cast<U>(t) != u)
|
if (static_cast<U>(t) != u)
|
||||||
{
|
{
|
||||||
#if defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
|
#if gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION || defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
|
||||||
throw narrowing_error();
|
throw narrowing_error();
|
||||||
#else
|
#else
|
||||||
std::terminate();
|
std::terminate();
|
||||||
@ -1740,7 +1766,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") if ((t < 0) != (u < 0))
|
gsl_SUPPRESS_MSVC_WARNING(4127, "conditional expression is constant") if ((t < 0) != (u < 0))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
|
#if gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION || defined(gsl_CONFIG_CONTRACT_VIOLATION_THROWS)
|
||||||
throw narrowing_error();
|
throw narrowing_error();
|
||||||
#else
|
#else
|
||||||
std::terminate();
|
std::terminate();
|
||||||
@ -1749,6 +1775,31 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
#endif // gsl_HAVE( EXCEPTIONS ) || !gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION
|
||||||
|
|
||||||
|
template <class T, class U>
|
||||||
|
gsl_api inline T narrow_failfast(U u)
|
||||||
|
{
|
||||||
|
T t = static_cast<T>(u);
|
||||||
|
|
||||||
|
gsl_Expects(static_cast<U>(t) == u);
|
||||||
|
|
||||||
|
#if gsl_HAVE(TYPE_TRAITS)
|
||||||
|
#if defined(__NVCC__)
|
||||||
|
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")
|
||||||
|
gsl_Expects((::gsl::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")
|
||||||
|
gsl_Expects((t < 0) == (u < 0));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// at() - Bounds-checked way of accessing static arrays, std::array, std::vector.
|
// at() - Bounds-checked way of accessing static arrays, std::array, std::vector.
|
||||||
@ -1786,9 +1837,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
gsl_api inline gsl_constexpr T &at(span<T> s, size_t pos)
|
gsl_api inline gsl_constexpr14 T &at(span<T> s, size_t pos)
|
||||||
{
|
{
|
||||||
return s.at(pos);
|
return s[pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1954,7 +2005,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#if gsl_HAVE(TYPE_TRAITS) && gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG) && !gsl_BETWEEN(gsl_COMPILER_CLANG_VERSION, 1, 400) && !gsl_BETWEEN(gsl_COMPILER_APPLECLANG_VERSION, 1, 1001)
|
#if gsl_HAVE(TYPE_TRAITS) && gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG) && !gsl_BETWEEN(gsl_COMPILER_CLANG_VERSION, 1, 400) && !gsl_BETWEEN(gsl_COMPILER_APPLECLANG_VERSION, 1, 1001)
|
||||||
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
,
|
,
|
||||||
typename std::enable_if<std::is_constructible<T, U>::value, int>::type = 0
|
typename std::enable_if<(std::is_constructible<T, U>::value), int>::type = 0
|
||||||
#endif
|
#endif
|
||||||
>
|
>
|
||||||
gsl_constexpr14 explicit not_null(U other)
|
gsl_constexpr14 explicit not_null(U other)
|
||||||
@ -1978,20 +2029,24 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
template <class U
|
template <class U
|
||||||
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
,
|
,
|
||||||
typename std::enable_if<std::is_constructible<T, U>::value && !std::is_convertible<U, T>::value, int>::type = 0>
|
typename std::enable_if<(std::is_constructible<T, U>::value && !std::is_convertible<U, T>::value), int>::type = 0>
|
||||||
gsl_constexpr14 explicit not_null(U other)
|
gsl_constexpr14 explicit not_null(U other)
|
||||||
: data_(T(std::move(other)))
|
: data_(T(std::move(other)))
|
||||||
{
|
{
|
||||||
gsl_Expects(data_.ptr_ != gsl_nullptr);
|
gsl_Expects(data_.ptr_ != gsl_nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class U, typename std::enable_if<std::is_convertible<U, T>::value, int>::type = 0>
|
template <class U
|
||||||
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
|
,
|
||||||
|
typename std::enable_if<(std::is_convertible<U, T>::value), int>::type = 0>
|
||||||
gsl_constexpr14 not_null(U other)
|
gsl_constexpr14 not_null(U other)
|
||||||
: data_(T(std::move(other)))
|
: data_(T(std::move(other)))
|
||||||
{
|
{
|
||||||
gsl_Expects(data_.ptr_ != gsl_nullptr);
|
gsl_Expects(data_.ptr_ != gsl_nullptr);
|
||||||
}
|
}
|
||||||
#else // a.k.a. !( gsl_HAVE( TYPE_TRAITS ) && gsl_HAVE( DEFAULT_FUNCTION_TEMPLATE_ARG ) && !gsl_BETWEEN( gsl_COMPILER_CLANG_VERSION, 1, 400 ) && !gsl_BETWEEN( gsl_COMPILER_APPLECLANG_VERSION, 1, 1001 ). If type_traits are not available, then we can't distinguish `is_convertible<>` and `is_constructible<>`, so we unconditionally permit implicit construction.
|
#else // a.k.a. !( gsl_HAVE( TYPE_TRAITS ) && gsl_HAVE( DEFAULT_FUNCTION_TEMPLATE_ARG ) && !gsl_BETWEEN( gsl_COMPILER_CLANG_VERSION, 1, 400 ) && !gsl_BETWEEN( gsl_COMPILER_APPLECLANG_VERSION, 1, 1001 ) \
|
||||||
|
// If type_traits are not available, then we can't distinguish `is_convertible<>` and `is_constructible<>`, so we unconditionally permit implicit construction.
|
||||||
template <class U>
|
template <class U>
|
||||||
gsl_constexpr14 not_null(U other)
|
gsl_constexpr14 not_null(U other)
|
||||||
: data_(T(std::move(other)))
|
: data_(T(std::move(other)))
|
||||||
@ -2016,20 +2071,24 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
template <class U
|
template <class U
|
||||||
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
,
|
,
|
||||||
typename std::enable_if<std::is_constructible<T, U>::value && !std::is_convertible<U, T>::value, int>::type = 0>
|
typename std::enable_if<(std::is_constructible<T, U>::value && !std::is_convertible<U, T>::value), int>::type = 0>
|
||||||
gsl_constexpr14 explicit not_null(not_null<U> other)
|
gsl_constexpr14 explicit not_null(not_null<U> other)
|
||||||
: data_(T(std::move(other.data_.ptr_)))
|
: data_(T(std::move(other.data_.ptr_)))
|
||||||
{
|
{
|
||||||
gsl_Expects(data_.ptr_ != gsl_nullptr);
|
gsl_Expects(data_.ptr_ != gsl_nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class U, typename std::enable_if<std::is_convertible<U, T>::value, int>::type = 0>
|
template <class U
|
||||||
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
|
,
|
||||||
|
typename std::enable_if<(std::is_convertible<U, T>::value), int>::type = 0>
|
||||||
gsl_constexpr14 not_null(not_null<U> other)
|
gsl_constexpr14 not_null(not_null<U> other)
|
||||||
: data_(T(std::move(other.data_.ptr_)))
|
: data_(T(std::move(other.data_.ptr_)))
|
||||||
{
|
{
|
||||||
gsl_Expects(data_.ptr_ != gsl_nullptr);
|
gsl_Expects(data_.ptr_ != gsl_nullptr);
|
||||||
}
|
}
|
||||||
#else // a.k.a. !( gsl_HAVE( TYPE_TRAITS ) && gsl_HAVE( DEFAULT_FUNCTION_TEMPLATE_ARG ) && !gsl_BETWEEN( gsl_COMPILER_CLANG_VERSION, 1, 400 ) && !gsl_BETWEEN( gsl_COMPILER_APPLECLANG_VERSION, 1, 1001 ). If type_traits are not available, then we can't distinguish `is_convertible<>` and `is_constructible<>`, so we unconditionally permit implicit construction.
|
#else // a.k.a. !( gsl_HAVE( TYPE_TRAITS ) && gsl_HAVE( DEFAULT_FUNCTION_TEMPLATE_ARG ) && !gsl_BETWEEN( gsl_COMPILER_CLANG_VERSION, 1, 400 ) && !gsl_BETWEEN( gsl_COMPILER_APPLECLANG_VERSION, 1, 1001 ) \
|
||||||
|
// If type_traits are not available, then we can't distinguish `is_convertible<>` and `is_constructible<>`, so we unconditionally permit implicit construction.
|
||||||
template <class U>
|
template <class U>
|
||||||
gsl_constexpr14 not_null(not_null<U> other)
|
gsl_constexpr14 not_null(not_null<U> other)
|
||||||
: data_(T(std::move(other.data_.ptr_)))
|
: data_(T(std::move(other.data_.ptr_)))
|
||||||
@ -2115,7 +2174,10 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#if gsl_HAVE(RVALUE_REFERENCE) && gsl_HAVE(TYPE_TRAITS) && gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG) && gsl_HAVE(EXPLICIT)
|
#if gsl_HAVE(RVALUE_REFERENCE) && gsl_HAVE(TYPE_TRAITS) && gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG) && gsl_HAVE(EXPLICIT)
|
||||||
// explicit conversion operator
|
// explicit conversion operator
|
||||||
|
|
||||||
template <class U, typename std::enable_if<std::is_constructible<U, T const &>::value && !std::is_convertible<T, U>::value && !detail::is_not_null_oracle<U>::value, int>::type = 0>
|
template <class U
|
||||||
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
|
,
|
||||||
|
typename std::enable_if<(std::is_constructible<U, T const &>::value && !std::is_convertible<T, U>::value && !detail::is_not_null_oracle<U>::value), int>::type = 0>
|
||||||
gsl_constexpr14 explicit
|
gsl_constexpr14 explicit
|
||||||
operator U() const
|
operator U() const
|
||||||
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
|
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
|
||||||
@ -2126,7 +2188,10 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
return U(data_.ptr_);
|
return U(data_.ptr_);
|
||||||
}
|
}
|
||||||
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
|
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
|
||||||
template <class U, typename std::enable_if<std::is_constructible<U, T>::value && !std::is_convertible<T, U>::value && !detail::is_not_null_oracle<U>::value, int>::type = 0>
|
template <class U
|
||||||
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
|
,
|
||||||
|
typename std::enable_if<(std::is_constructible<U, T>::value && !std::is_convertible<T, U>::value && !detail::is_not_null_oracle<U>::value), int>::type = 0>
|
||||||
gsl_constexpr14 explicit
|
gsl_constexpr14 explicit
|
||||||
operator U() &&
|
operator U() &&
|
||||||
{
|
{
|
||||||
@ -2136,7 +2201,10 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// implicit conversion operator
|
// implicit conversion operator
|
||||||
template <class U, typename std::enable_if<std::is_constructible<U, T const &>::value && std::is_convertible<T, U>::value && !detail::is_not_null_oracle<U>::value, int>::type = 0>
|
template <class U
|
||||||
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
|
,
|
||||||
|
typename std::enable_if<(std::is_constructible<U, T const &>::value && std::is_convertible<T, U>::value && !detail::is_not_null_oracle<U>::value), int>::type = 0>
|
||||||
gsl_constexpr14
|
gsl_constexpr14
|
||||||
operator U() const
|
operator U() const
|
||||||
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
|
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
|
||||||
@ -2147,7 +2215,10 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
return data_.ptr_;
|
return data_.ptr_;
|
||||||
}
|
}
|
||||||
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
|
#if gsl_HAVE(FUNCTION_REF_QUALIFIER)
|
||||||
template <class U, typename std::enable_if<std::is_convertible<T, U>::value && !detail::is_not_null_oracle<U>::value, int>::type = 0>
|
template <class U
|
||||||
|
// We *have* to use SFINAE with an NTTP arg here, otherwise the overload is ambiguous.
|
||||||
|
,
|
||||||
|
typename std::enable_if<(std::is_convertible<T, U>::value && !detail::is_not_null_oracle<U>::value), int>::type = 0>
|
||||||
gsl_constexpr14
|
gsl_constexpr14
|
||||||
operator U() &&
|
operator U() &&
|
||||||
{
|
{
|
||||||
@ -2264,7 +2335,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
template <class U
|
template <class U
|
||||||
gsl_REQUIRES_A_((std::is_constructible<T, U>::value))>
|
gsl_ENABLE_IF_((std::is_constructible<T, U>::value))>
|
||||||
gsl_constexpr14
|
gsl_constexpr14
|
||||||
#if gsl_HAVE(RVALUE_REFERENCE)
|
#if gsl_HAVE(RVALUE_REFERENCE)
|
||||||
not_null_ic(U &&u)
|
not_null_ic(U &&u)
|
||||||
@ -2444,7 +2515,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IntegerType gsl_REQUIRES_A_((std::is_integral<IntegerType>::value))>
|
template <class IntegerType gsl_ENABLE_IF_((std::is_integral<IntegerType>::value))>
|
||||||
gsl_api inline gsl_constexpr IntegerType to_integer(byte b) gsl_noexcept
|
gsl_api inline gsl_constexpr IntegerType to_integer(byte b) gsl_noexcept
|
||||||
{
|
{
|
||||||
#if gsl_HAVE(ENUM_CLASS_CONSTRUCTION_FROM_UNDERLYING_TYPE)
|
#if gsl_HAVE(ENUM_CLASS_CONSTRUCTION_FROM_UNDERLYING_TYPE)
|
||||||
@ -2464,7 +2535,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
return static_cast<unsigned char>(i);
|
return static_cast<unsigned char>(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IntegerType gsl_REQUIRES_A_((std::is_integral<IntegerType>::value))>
|
template <class IntegerType gsl_ENABLE_IF_((std::is_integral<IntegerType>::value))>
|
||||||
gsl_api inline gsl_constexpr14 byte &operator<<=(byte &b, IntegerType shift) gsl_noexcept
|
gsl_api inline gsl_constexpr14 byte &operator<<=(byte &b, IntegerType shift) gsl_noexcept
|
||||||
{
|
{
|
||||||
#if gsl_HAVE(ENUM_CLASS_CONSTRUCTION_FROM_UNDERLYING_TYPE)
|
#if gsl_HAVE(ENUM_CLASS_CONSTRUCTION_FROM_UNDERLYING_TYPE)
|
||||||
@ -2475,13 +2546,13 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IntegerType gsl_REQUIRES_A_((std::is_integral<IntegerType>::value))>
|
template <class IntegerType gsl_ENABLE_IF_((std::is_integral<IntegerType>::value))>
|
||||||
gsl_api inline gsl_constexpr byte operator<<(byte b, IntegerType shift) gsl_noexcept
|
gsl_api inline gsl_constexpr byte operator<<(byte b, IntegerType shift) gsl_noexcept
|
||||||
{
|
{
|
||||||
return ::gsl::to_byte(::gsl::to_uchar(b) << shift);
|
return ::gsl::to_byte(::gsl::to_uchar(b) << shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IntegerType gsl_REQUIRES_A_((std::is_integral<IntegerType>::value))>
|
template <class IntegerType gsl_ENABLE_IF_((std::is_integral<IntegerType>::value))>
|
||||||
gsl_api inline gsl_constexpr14 byte &operator>>=(byte &b, IntegerType shift) gsl_noexcept
|
gsl_api inline gsl_constexpr14 byte &operator>>=(byte &b, IntegerType shift) gsl_noexcept
|
||||||
{
|
{
|
||||||
#if gsl_HAVE(ENUM_CLASS_CONSTRUCTION_FROM_UNDERLYING_TYPE)
|
#if gsl_HAVE(ENUM_CLASS_CONSTRUCTION_FROM_UNDERLYING_TYPE)
|
||||||
@ -2492,7 +2563,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IntegerType gsl_REQUIRES_A_((std::is_integral<IntegerType>::value))>
|
template <class IntegerType gsl_ENABLE_IF_((std::is_integral<IntegerType>::value))>
|
||||||
gsl_api inline gsl_constexpr byte operator>>(byte b, IntegerType shift) gsl_noexcept
|
gsl_api inline gsl_constexpr byte operator>>(byte b, IntegerType shift) gsl_noexcept
|
||||||
{
|
{
|
||||||
return ::gsl::to_byte(::gsl::to_uchar(b) >> shift);
|
return ::gsl::to_byte(::gsl::to_uchar(b) >> shift);
|
||||||
@ -2630,7 +2701,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if gsl_HAVE(IS_DELETE)
|
#if gsl_HAVE(IS_DELETE)
|
||||||
gsl_api gsl_constexpr span(reference data_in)
|
gsl_DEPRECATED
|
||||||
|
gsl_api gsl_constexpr
|
||||||
|
span(reference data_in)
|
||||||
: span(&data_in, 1)
|
: span(&data_in, 1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -2672,7 +2745,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
template <size_t N
|
template <size_t N
|
||||||
gsl_REQUIRES_A_((std::is_convertible<value_type (*)[], element_type (*)[]>::value))>
|
gsl_ENABLE_IF_((std::is_convertible<value_type (*)[], element_type (*)[]>::value))>
|
||||||
gsl_api gsl_constexpr span(element_type (&arr)[N]) gsl_noexcept
|
gsl_api gsl_constexpr span(element_type (&arr)[N]) gsl_noexcept
|
||||||
: first_(gsl_ADDRESSOF(arr[0])),
|
: first_(gsl_ADDRESSOF(arr[0])),
|
||||||
last_(gsl_ADDRESSOF(arr[0]) + N)
|
last_(gsl_ADDRESSOF(arr[0]) + N)
|
||||||
@ -2698,14 +2771,14 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
template <size_t N
|
template <size_t N
|
||||||
gsl_REQUIRES_A_((std::is_convertible<value_type (*)[], element_type (*)[]>::value))>
|
gsl_ENABLE_IF_((std::is_convertible<value_type (*)[], element_type (*)[]>::value))>
|
||||||
gsl_constexpr span(std::array<value_type, N> &arr)
|
gsl_constexpr span(std::array<value_type, N> &arr)
|
||||||
: first_(arr.data()), last_(arr.data() + N)
|
: first_(arr.data()), last_(arr.data() + N)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t N
|
template <size_t N
|
||||||
gsl_REQUIRES_A_((std::is_convertible<value_type (*)[], element_type (*)[]>::value))>
|
gsl_ENABLE_IF_((std::is_convertible<value_type (*)[], element_type (*)[]>::value))>
|
||||||
gsl_constexpr span(std::array<value_type, N> const &arr)
|
gsl_constexpr span(std::array<value_type, N> const &arr)
|
||||||
: first_(arr.data()), last_(arr.data() + N)
|
: first_(arr.data()), last_(arr.data() + N)
|
||||||
{
|
{
|
||||||
@ -2716,7 +2789,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
#if gsl_HAVE(CONSTRAINED_SPAN_CONTAINER_CTOR)
|
#if gsl_HAVE(CONSTRAINED_SPAN_CONTAINER_CTOR)
|
||||||
template <class Container
|
template <class Container
|
||||||
gsl_REQUIRES_A_((detail::is_compatible_container<Container, element_type>::value))>
|
gsl_ENABLE_IF_((detail::is_compatible_container<Container, element_type>::value))>
|
||||||
gsl_constexpr span(Container &cont) gsl_noexcept
|
gsl_constexpr span(Container &cont) gsl_noexcept
|
||||||
: first_(std17::data(cont)),
|
: first_(std17::data(cont)),
|
||||||
last_(std17::data(cont) + std17::size(cont))
|
last_(std17::data(cont) + std17::size(cont))
|
||||||
@ -2724,7 +2797,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <class Container
|
template <class Container
|
||||||
gsl_REQUIRES_A_((
|
gsl_ENABLE_IF_((
|
||||||
std::is_const<element_type>::value && detail::is_compatible_container<Container, element_type>::value))>
|
std::is_const<element_type>::value && detail::is_compatible_container<Container, element_type>::value))>
|
||||||
gsl_constexpr span(Container const &cont) gsl_noexcept
|
gsl_constexpr span(Container const &cont) gsl_noexcept
|
||||||
: first_(std17::data(cont)),
|
: first_(std17::data(cont)),
|
||||||
@ -2770,7 +2843,9 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
// constructor taking shared_ptr deprecated since 0.29.0
|
// constructor taking shared_ptr deprecated since 0.29.0
|
||||||
|
|
||||||
#if gsl_HAVE(SHARED_PTR)
|
#if gsl_HAVE(SHARED_PTR)
|
||||||
gsl_constexpr span(shared_ptr<element_type> const &ptr)
|
gsl_DEPRECATED
|
||||||
|
gsl_constexpr
|
||||||
|
span(shared_ptr<element_type> const &ptr)
|
||||||
: first_(ptr.get()), last_(ptr.get() ? ptr.get() + 1 : gsl_nullptr)
|
: first_(ptr.get()), last_(ptr.get() ? ptr.get() + 1 : gsl_nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -2784,12 +2859,16 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#else
|
#else
|
||||||
template <class ArrayElementType>
|
template <class ArrayElementType>
|
||||||
#endif
|
#endif
|
||||||
gsl_constexpr span(unique_ptr<ArrayElementType> const &ptr, index_type count)
|
gsl_DEPRECATED
|
||||||
|
gsl_constexpr
|
||||||
|
span(unique_ptr<ArrayElementType> const &ptr, index_type count)
|
||||||
: first_(ptr.get()), last_(ptr.get() + count)
|
: first_(ptr.get()), last_(ptr.get() + count)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
gsl_constexpr span(unique_ptr<element_type> const &ptr)
|
gsl_DEPRECATED
|
||||||
|
gsl_constexpr
|
||||||
|
span(unique_ptr<element_type> const &ptr)
|
||||||
: first_(ptr.get()), last_(ptr.get() ? ptr.get() + 1 : gsl_nullptr)
|
: first_(ptr.get()), last_(ptr.get() ? ptr.get() + 1 : gsl_nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -2820,7 +2899,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class U
|
template <class U
|
||||||
gsl_REQUIRES_A_((std::is_convertible<U (*)[], element_type (*)[]>::value))>
|
gsl_ENABLE_IF_((std::is_convertible<U (*)[], element_type (*)[]>::value))>
|
||||||
gsl_api gsl_constexpr span(span<U> const &other)
|
gsl_api gsl_constexpr span(span<U> const &other)
|
||||||
: first_(other.begin()), last_(other.end())
|
: first_(other.begin()), last_(other.end())
|
||||||
{
|
{
|
||||||
@ -2883,22 +2962,39 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
// 26.7.3.5 Element access [span.elem]
|
// 26.7.3.5 Element access [span.elem]
|
||||||
|
|
||||||
gsl_api gsl_constexpr reference operator[](index_type pos) const
|
gsl_api gsl_constexpr14 reference operator[](index_type pos) const
|
||||||
{
|
|
||||||
return at(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
gsl_api gsl_constexpr reference operator()(index_type pos) const
|
|
||||||
{
|
|
||||||
return at(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
gsl_api gsl_constexpr14 reference at(index_type pos) const
|
|
||||||
{
|
{
|
||||||
gsl_Expects(pos < size());
|
gsl_Expects(pos < size());
|
||||||
return first_[pos];
|
return first_[pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !gsl_DEPRECATE_TO_LEVEL(6)
|
||||||
|
gsl_DEPRECATED_MSG("use subscript indexing instead")
|
||||||
|
gsl_api gsl_constexpr14 reference
|
||||||
|
operator()(index_type pos) const
|
||||||
|
{
|
||||||
|
return (*this)[pos];
|
||||||
|
}
|
||||||
|
|
||||||
|
gsl_DEPRECATED_MSG("use subscript indexing instead")
|
||||||
|
gsl_api gsl_constexpr14 reference at(index_type pos) const
|
||||||
|
{
|
||||||
|
return (*this)[pos];
|
||||||
|
}
|
||||||
|
#endif // deprecate
|
||||||
|
|
||||||
|
gsl_api gsl_constexpr14 reference front() const
|
||||||
|
{
|
||||||
|
gsl_Expects(first_ != last_);
|
||||||
|
return *first_;
|
||||||
|
}
|
||||||
|
|
||||||
|
gsl_api gsl_constexpr14 reference back() const
|
||||||
|
{
|
||||||
|
gsl_Expects(first_ != last_);
|
||||||
|
return *(last_ - 1);
|
||||||
|
}
|
||||||
|
|
||||||
gsl_api gsl_constexpr pointer data() const gsl_noexcept
|
gsl_api gsl_constexpr pointer data() const gsl_noexcept
|
||||||
{
|
{
|
||||||
return first_;
|
return first_;
|
||||||
@ -2963,6 +3059,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#if !gsl_DEPRECATE_TO_LEVEL(3)
|
#if !gsl_DEPRECATE_TO_LEVEL(3)
|
||||||
// member length() deprecated since 0.29.0
|
// member length() deprecated since 0.29.0
|
||||||
|
|
||||||
|
gsl_DEPRECATED_MSG("use size() instead")
|
||||||
gsl_api gsl_constexpr index_type length() const gsl_noexcept
|
gsl_api gsl_constexpr index_type length() const gsl_noexcept
|
||||||
{
|
{
|
||||||
return size();
|
return size();
|
||||||
@ -2970,6 +3067,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
// member length_bytes() deprecated since 0.29.0
|
// member length_bytes() deprecated since 0.29.0
|
||||||
|
|
||||||
|
gsl_DEPRECATED_MSG("use size_bytes() instead")
|
||||||
gsl_api gsl_constexpr index_type length_bytes() const gsl_noexcept
|
gsl_api gsl_constexpr index_type length_bytes() const gsl_noexcept
|
||||||
{
|
{
|
||||||
return size_bytes();
|
return size_bytes();
|
||||||
@ -2979,11 +3077,13 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#if !gsl_DEPRECATE_TO_LEVEL(2)
|
#if !gsl_DEPRECATE_TO_LEVEL(2)
|
||||||
// member as_bytes(), as_writeable_bytes deprecated since 0.17.0
|
// member as_bytes(), as_writeable_bytes deprecated since 0.17.0
|
||||||
|
|
||||||
|
gsl_DEPRECATED_MSG("use free function gsl::as_bytes() instead")
|
||||||
gsl_api span<const byte> as_bytes() const gsl_noexcept
|
gsl_api span<const byte> as_bytes() const gsl_noexcept
|
||||||
{
|
{
|
||||||
return span<const byte>(reinterpret_cast<const byte *>(data()), size_bytes()); // NOLINT
|
return span<const byte>(reinterpret_cast<const byte *>(data()), size_bytes()); // NOLINT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gsl_DEPRECATED_MSG("use free function gsl::as_writable_bytes() instead")
|
||||||
gsl_api span<byte> as_writeable_bytes() const gsl_noexcept
|
gsl_api span<byte> as_writeable_bytes() const gsl_noexcept
|
||||||
{
|
{
|
||||||
return span<byte>(reinterpret_cast<byte *>(data()), size_bytes()); // NOLINT
|
return span<byte>(reinterpret_cast<byte *>(data()), size_bytes()); // NOLINT
|
||||||
@ -3026,6 +3126,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
// 26.7.3.7 Comparison operators [span.comparison]
|
// 26.7.3.7 Comparison operators [span.comparison]
|
||||||
|
|
||||||
|
#if gsl_CONFIG(ALLOWS_SPAN_COMPARISON)
|
||||||
#if gsl_CONFIG(ALLOWS_NONSTRICT_SPAN_COMPARISON)
|
#if gsl_CONFIG(ALLOWS_NONSTRICT_SPAN_COMPARISON)
|
||||||
|
|
||||||
template <class T, class U>
|
template <class T, class U>
|
||||||
@ -3040,7 +3141,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
|
return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else // a.k.a. !gsl_CONFIG( ALLOWS_NONSTRICT_SPAN_COMPARISON )
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
gsl_SUPPRESS_MSGSL_WARNING(stl .1) inline gsl_constexpr bool operator==(span<T> const &l, span<T> const &r)
|
gsl_SUPPRESS_MSGSL_WARNING(stl .1) inline gsl_constexpr bool operator==(span<T> const &l, span<T> const &r)
|
||||||
@ -3053,7 +3154,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
{
|
{
|
||||||
return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
|
return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
|
||||||
}
|
}
|
||||||
#endif
|
#endif // gsl_CONFIG( ALLOWS_NONSTRICT_SPAN_COMPARISON )
|
||||||
|
|
||||||
template <class T, class U>
|
template <class T, class U>
|
||||||
inline gsl_constexpr bool operator!=(span<T> const &l, span<U> const &r)
|
inline gsl_constexpr bool operator!=(span<T> const &l, span<U> const &r)
|
||||||
@ -3078,6 +3179,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
{
|
{
|
||||||
return !(l < r);
|
return !(l < r);
|
||||||
}
|
}
|
||||||
|
#endif // gsl_CONFIG( ALLOWS_SPAN_COMPARISON )
|
||||||
|
|
||||||
// span algorithms
|
// span algorithms
|
||||||
|
|
||||||
@ -3129,11 +3231,21 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
gsl_api inline span<byte> as_writeable_bytes(span<T> spn) gsl_noexcept
|
gsl_api inline span<byte> as_writable_bytes(span<T> spn) gsl_noexcept
|
||||||
{
|
{
|
||||||
return span<byte>(reinterpret_cast<byte *>(spn.data()), spn.size_bytes()); // NOLINT
|
return span<byte>(reinterpret_cast<byte *>(spn.data()), spn.size_bytes()); // NOLINT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !gsl_DEPRECATE_TO_LEVEL(6)
|
||||||
|
template <class T>
|
||||||
|
gsl_DEPRECATED_MSG("use as_writable_bytes() (different spelling) instead")
|
||||||
|
gsl_api inline span<byte>
|
||||||
|
as_writeable_bytes(span<T> spn) gsl_noexcept
|
||||||
|
{
|
||||||
|
return span<byte>(reinterpret_cast<byte *>(spn.data()), spn.size_bytes()); // NOLINT
|
||||||
|
}
|
||||||
|
#endif // deprecate
|
||||||
|
|
||||||
#if gsl_FEATURE_TO_STD(MAKE_SPAN)
|
#if gsl_FEATURE_TO_STD(MAKE_SPAN)
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
@ -3229,7 +3341,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
#if !gsl_DEPRECATE_TO_LEVEL(4)
|
#if !gsl_DEPRECATE_TO_LEVEL(4)
|
||||||
template <class Ptr>
|
template <class Ptr>
|
||||||
inline span<typename Ptr::element_type>
|
gsl_DEPRECATED inline span<typename Ptr::element_type>
|
||||||
make_span(Ptr & ptr)
|
make_span(Ptr & ptr)
|
||||||
{
|
{
|
||||||
return span<typename Ptr::element_type>(ptr);
|
return span<typename Ptr::element_type>(ptr);
|
||||||
@ -3237,7 +3349,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif // !gsl_DEPRECATE_TO_LEVEL( 4 )
|
#endif // !gsl_DEPRECATE_TO_LEVEL( 4 )
|
||||||
|
|
||||||
template <class Ptr>
|
template <class Ptr>
|
||||||
inline span<typename Ptr::element_type>
|
gsl_DEPRECATED inline span<typename Ptr::element_type>
|
||||||
make_span(Ptr & ptr, typename span<typename Ptr::element_type>::index_type count)
|
make_span(Ptr & ptr, typename span<typename Ptr::element_type>::index_type count)
|
||||||
{
|
{
|
||||||
return span<typename Ptr::element_type>(ptr, count);
|
return span<typename Ptr::element_type>(ptr, count);
|
||||||
@ -3386,7 +3498,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
// Exclude: array, [basic_string,] basic_string_span
|
// Exclude: array, [basic_string,] basic_string_span
|
||||||
|
|
||||||
template <class Container
|
template <class Container
|
||||||
gsl_REQUIRES_A_((
|
gsl_ENABLE_IF_((
|
||||||
!detail::is_std_array<Container>::value && !detail::is_basic_string_span<Container>::value && std::is_convertible<typename Container::pointer, pointer>::value && std::is_convertible<typename Container::pointer, decltype(std::declval<Container>().data())>::value))>
|
!detail::is_std_array<Container>::value && !detail::is_basic_string_span<Container>::value && std::is_convertible<typename Container::pointer, pointer>::value && std::is_convertible<typename Container::pointer, decltype(std::declval<Container>().data())>::value))>
|
||||||
gsl_constexpr basic_string_span(Container &cont)
|
gsl_constexpr basic_string_span(Container &cont)
|
||||||
: span_((cont))
|
: span_((cont))
|
||||||
@ -3396,7 +3508,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
// Exclude: array, [basic_string,] basic_string_span
|
// Exclude: array, [basic_string,] basic_string_span
|
||||||
|
|
||||||
template <class Container
|
template <class Container
|
||||||
gsl_REQUIRES_A_((
|
gsl_ENABLE_IF_((
|
||||||
!detail::is_std_array<Container>::value && !detail::is_basic_string_span<Container>::value && std::is_convertible<typename Container::pointer, pointer>::value && std::is_convertible<typename Container::pointer, decltype(std::declval<Container const &>().data())>::value))>
|
!detail::is_std_array<Container>::value && !detail::is_basic_string_span<Container>::value && std::is_convertible<typename Container::pointer, pointer>::value && std::is_convertible<typename Container::pointer, decltype(std::declval<Container const &>().data())>::value))>
|
||||||
gsl_constexpr basic_string_span(Container const &cont)
|
gsl_constexpr basic_string_span(Container const &cont)
|
||||||
: span_((cont))
|
: span_((cont))
|
||||||
@ -3449,7 +3561,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class U
|
template <class U
|
||||||
gsl_REQUIRES_A_((std::is_convertible<typename basic_string_span<U>::pointer, pointer>::value))>
|
gsl_ENABLE_IF_((std::is_convertible<typename basic_string_span<U>::pointer, pointer>::value))>
|
||||||
gsl_api gsl_constexpr basic_string_span(basic_string_span<U> const &rhs)
|
gsl_api gsl_constexpr basic_string_span(basic_string_span<U> const &rhs)
|
||||||
: span_(reinterpret_cast<pointer>(rhs.data()), rhs.length()) // NOLINT
|
: span_(reinterpret_cast<pointer>(rhs.data()), rhs.length()) // NOLINT
|
||||||
{
|
{
|
||||||
@ -3457,7 +3569,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
|
|
||||||
#if gsl_CPP11_OR_GREATER || gsl_COMPILER_MSVC_VERSION >= 120
|
#if gsl_CPP11_OR_GREATER || gsl_COMPILER_MSVC_VERSION >= 120
|
||||||
template <class U
|
template <class U
|
||||||
gsl_REQUIRES_A_((std::is_convertible<typename basic_string_span<U>::pointer, pointer>::value))>
|
gsl_ENABLE_IF_((std::is_convertible<typename basic_string_span<U>::pointer, pointer>::value))>
|
||||||
gsl_api gsl_constexpr basic_string_span(basic_string_span<U> &&rhs)
|
gsl_api gsl_constexpr basic_string_span(basic_string_span<U> &&rhs)
|
||||||
: span_(reinterpret_cast<pointer>(rhs.data()), rhs.length()) // NOLINT
|
: span_(reinterpret_cast<pointer>(rhs.data()), rhs.length()) // NOLINT
|
||||||
{
|
{
|
||||||
@ -3539,15 +3651,29 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
return size() == 0;
|
return size() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
gsl_api gsl_constexpr reference operator[](index_type idx) const
|
gsl_api gsl_constexpr14 reference operator[](index_type idx) const
|
||||||
{
|
{
|
||||||
return span_[idx];
|
return span_[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
gsl_api gsl_constexpr reference operator()(index_type idx) const
|
#if !gsl_DEPRECATE_TO_LEVEL(6)
|
||||||
|
gsl_DEPRECATED_MSG("use subscript indexing instead")
|
||||||
|
gsl_api gsl_constexpr14 reference
|
||||||
|
operator()(index_type idx) const
|
||||||
{
|
{
|
||||||
return span_[idx];
|
return span_[idx];
|
||||||
}
|
}
|
||||||
|
#endif // deprecate
|
||||||
|
|
||||||
|
gsl_api gsl_constexpr14 reference front() const
|
||||||
|
{
|
||||||
|
return span_.front();
|
||||||
|
}
|
||||||
|
|
||||||
|
gsl_api gsl_constexpr14 reference back() const
|
||||||
|
{
|
||||||
|
return span_.back();
|
||||||
|
}
|
||||||
|
|
||||||
gsl_api gsl_constexpr pointer data() const gsl_noexcept
|
gsl_api gsl_constexpr pointer data() const gsl_noexcept
|
||||||
{
|
{
|
||||||
@ -3643,7 +3769,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#if gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG)
|
#if gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG)
|
||||||
|
|
||||||
template <class T, class U
|
template <class T, class U
|
||||||
gsl_REQUIRES_A_((!detail::is_basic_string_span<U>::value))>
|
gsl_ENABLE_IF_((!detail::is_basic_string_span<U>::value))>
|
||||||
gsl_SUPPRESS_MSGSL_WARNING(stl .1) inline gsl_constexpr14 bool operator==(U const &u, basic_string_span<T> const &r) gsl_noexcept
|
gsl_SUPPRESS_MSGSL_WARNING(stl .1) inline gsl_constexpr14 bool operator==(U const &u, basic_string_span<T> const &r) gsl_noexcept
|
||||||
{
|
{
|
||||||
const basic_string_span<typename std11::add_const<T>::type> l(u);
|
const basic_string_span<typename std11::add_const<T>::type> l(u);
|
||||||
@ -3652,7 +3778,7 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <class T, class U
|
template <class T, class U
|
||||||
gsl_REQUIRES_A_((!detail::is_basic_string_span<U>::value))>
|
gsl_ENABLE_IF_((!detail::is_basic_string_span<U>::value))>
|
||||||
gsl_SUPPRESS_MSGSL_WARNING(stl .1) inline gsl_constexpr14 bool operator<(U const &u, basic_string_span<T> const &r) gsl_noexcept
|
gsl_SUPPRESS_MSGSL_WARNING(stl .1) inline gsl_constexpr14 bool operator<(U const &u, basic_string_span<T> const &r) gsl_noexcept
|
||||||
{
|
{
|
||||||
const basic_string_span<typename std11::add_const<T>::type> l(u);
|
const basic_string_span<typename std11::add_const<T>::type> l(u);
|
||||||
@ -3714,28 +3840,28 @@ gsl_DISABLE_MSVC_WARNINGS(26432 26410 26415 26418 26472 26439 26440 26455 26473
|
|||||||
#if gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG)
|
#if gsl_HAVE(DEFAULT_FUNCTION_TEMPLATE_ARG)
|
||||||
|
|
||||||
template <class T, class U
|
template <class T, class U
|
||||||
gsl_REQUIRES_A_((!detail::is_basic_string_span<U>::value))>
|
gsl_ENABLE_IF_((!detail::is_basic_string_span<U>::value))>
|
||||||
inline gsl_constexpr14 bool operator!=(U const &l, basic_string_span<T> const &r) gsl_noexcept
|
inline gsl_constexpr14 bool operator!=(U const &l, basic_string_span<T> const &r) gsl_noexcept
|
||||||
{
|
{
|
||||||
return !(l == r);
|
return !(l == r);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T, class U
|
template <class T, class U
|
||||||
gsl_REQUIRES_A_((!detail::is_basic_string_span<U>::value))>
|
gsl_ENABLE_IF_((!detail::is_basic_string_span<U>::value))>
|
||||||
inline gsl_constexpr14 bool operator<=(U const &l, basic_string_span<T> const &r) gsl_noexcept
|
inline gsl_constexpr14 bool operator<=(U const &l, basic_string_span<T> const &r) gsl_noexcept
|
||||||
{
|
{
|
||||||
return !(r < l);
|
return !(r < l);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T, class U
|
template <class T, class U
|
||||||
gsl_REQUIRES_A_((!detail::is_basic_string_span<U>::value))>
|
gsl_ENABLE_IF_((!detail::is_basic_string_span<U>::value))>
|
||||||
inline gsl_constexpr14 bool operator>(U const &l, basic_string_span<T> const &r) gsl_noexcept
|
inline gsl_constexpr14 bool operator>(U const &l, basic_string_span<T> const &r) gsl_noexcept
|
||||||
{
|
{
|
||||||
return (r < l);
|
return (r < l);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T, class U
|
template <class T, class U
|
||||||
gsl_REQUIRES_A_((!detail::is_basic_string_span<U>::value))>
|
gsl_ENABLE_IF_((!detail::is_basic_string_span<U>::value))>
|
||||||
inline gsl_constexpr14 bool operator>=(U const &l, basic_string_span<T> const &r) gsl_noexcept
|
inline gsl_constexpr14 bool operator>=(U const &l, basic_string_span<T> const &r) gsl_noexcept
|
||||||
{
|
{
|
||||||
return !(l < r);
|
return !(l < r);
|
||||||
@ -4099,8 +4225,10 @@ using ::gsl::on_return;
|
|||||||
|
|
||||||
using ::gsl::narrow;
|
using ::gsl::narrow;
|
||||||
using ::gsl::narrow_cast;
|
using ::gsl::narrow_cast;
|
||||||
|
using ::gsl::narrow_failfast;
|
||||||
using ::gsl::narrowing_error;
|
using ::gsl::narrowing_error;
|
||||||
|
|
||||||
|
|
||||||
using ::gsl::at;
|
using ::gsl::at;
|
||||||
|
|
||||||
using ::gsl::make_not_null;
|
using ::gsl::make_not_null;
|
||||||
@ -4112,11 +4240,14 @@ using ::gsl::with_container;
|
|||||||
using ::gsl::with_container_t;
|
using ::gsl::with_container_t;
|
||||||
|
|
||||||
using ::gsl::as_bytes;
|
using ::gsl::as_bytes;
|
||||||
using ::gsl::as_writeable_bytes;
|
using ::gsl::as_writable_bytes;
|
||||||
using ::gsl::byte_span;
|
using ::gsl::byte_span;
|
||||||
using ::gsl::copy;
|
using ::gsl::copy;
|
||||||
using ::gsl::make_span;
|
using ::gsl::make_span;
|
||||||
using ::gsl::span;
|
using ::gsl::span;
|
||||||
|
#if !gsl_DEPRECATE_TO_LEVEL(6)
|
||||||
|
using ::gsl::as_writeable_bytes;
|
||||||
|
#endif
|
||||||
|
|
||||||
using ::gsl::basic_string_span;
|
using ::gsl::basic_string_span;
|
||||||
using ::gsl::cstring_span;
|
using ::gsl::cstring_span;
|
||||||
|
Loading…
Reference in New Issue
Block a user