aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-04-28 20:25:01 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-04-28 20:25:01 +0000
commitf002a932f499e1c11e5a937e6646423aef73ebbf (patch)
tree051e6a6105b6a9e535a4373f30b8e3736310b78e
parentd376f3d2c1c30ea8725b903d353492d944a83858 (diff)
parentd4e54c121f49d73c9e18aff087ce3dbafc2eab47 (diff)
downloadMicrosoft-GSL-android12-mainline-tzdata-release.tar.gz
Change-Id: I03b1f10ec97bc793f9d8ff2a42be57d98cb14770
-rw-r--r--CONTRIBUTING.md4
-rw-r--r--METADATA6
-rw-r--r--README.md2
-rw-r--r--ThirdPartyNotices.txt2
-rw-r--r--appveyor.yml20
-rw-r--r--include/gsl/gsl_byte2
-rw-r--r--include/gsl/gsl_util9
-rw-r--r--include/gsl/multi_span266
-rw-r--r--include/gsl/pointers8
-rw-r--r--include/gsl/span2
-rw-r--r--include/gsl/string_span4
-rw-r--r--tests/bounds_tests.cpp10
-rw-r--r--tests/multi_span_tests.cpp16
-rw-r--r--tests/notnull_tests.cpp4
-rw-r--r--tests/strided_span_tests.cpp12
15 files changed, 173 insertions, 194 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 990b8e1..10e6c32 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,6 @@
-## Contributing to the Guidelines Support Library
+## Contributing to the Guideline Support Library
-The Guidelines Support Library (GSL) contains functions and types that are suggested for use by the
+The Guideline Support Library (GSL) contains functions and types that are suggested for use by the
[C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines). GSL design changes are made only as a result of modifications to the Guidelines.
GSL is accepting contributions that improve or refine any of the types in this library as well as ports to other platforms. Changes should have an issue
diff --git a/METADATA b/METADATA
index 77c6f70..c1ce0f4 100644
--- a/METADATA
+++ b/METADATA
@@ -5,10 +5,10 @@ third_party {
type: GIT
value: "https://github.com/Microsoft/GSL"
}
- version: "3d56ba9e7f2d61fd8c9c2a7715b46fde38c00123"
+ version: "7d78b743e43ecba06ca47426d03d9d16076dec16"
last_upgrade_date {
year: 2019
- month: 10
- day: 24
+ month: 2
+ day: 1
}
}
diff --git a/README.md b/README.md
index df9fcb8..183553f 100644
--- a/README.md
+++ b/README.md
@@ -36,8 +36,6 @@ The test suite that exercises GSL has been built and passes successfully on the
* GNU/Linux using Clang/LLVM 6.0
* GNU/Linux using Clang/LLVM 7.0
* GNU/Linux using GCC 5.1
-* OS X Mojave 10.14.4 using Apple LLVM version 10.0.0 (10.0.1.10010046)
-* OS X Mojave 10.14.3 using Apple LLVM version 10.0.0 (clang-1000.11.45.5)
* OS X Yosemite using Xcode with Apple Clang 7.0.0.7000072
* OS X Yosemite using GCC-5.2.0
* OS X Sierra 10.12.4 using Apple LLVM version 8.1.0 (Clang-802.0.42)
diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt
index ebf7b6e..94b9acc 100644
--- a/ThirdPartyNotices.txt
+++ b/ThirdPartyNotices.txt
@@ -2,7 +2,7 @@
THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
Do Not Translate or Localize
-GSL: Guidelines Support Library incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise.
+GSL: Guideline Support Library incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise.
1. Catch (https://github.com/philsquared/Catch)
diff --git a/appveyor.yml b/appveyor.yml
index 6feaf7c..c3e3c87 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -11,7 +11,6 @@ configuration:
image:
- Visual Studio 2015
- Visual Studio 2017
- - Visual Studio 2019
environment:
NINJA_TAG: v1.8.2
@@ -19,7 +18,6 @@ environment:
NINJA_PATH: C:\Tools\ninja\ninja-%NINJA_TAG%
VCVAR2015: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'
VCVAR2017: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat'
- VCVAR2019: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat'
matrix:
- GSL_CXX_STANDARD: 14
USE_TOOLSET: MSVC
@@ -43,7 +41,7 @@ matrix:
USE_GENERATOR: MSBuild
cache:
- - C:\cmake-3.14.4-win32-x86
+ - C:\cmake-3.8.0-win32-x86
- C:\Tools\ninja
install:
@@ -60,11 +58,11 @@ install:
$env:PATH = "$env:NINJA_PATH;$env:PATH"
} else { Write-Warning "Failed to find ninja.exe in expected location." }
if ($env:USE_TOOLSET -ne "LLVM") {
- if (![IO.File]::Exists("C:\cmake-3.14.0-win32-x86\bin\cmake.exe")) {
- Start-FileDownload 'https://cmake.org/files/v3.14/cmake-3.14.4-win32-x86.zip'
- 7z x -y -bso0 cmake-3.14.4-win32-x86.zip -oC:\
+ if (![IO.File]::Exists("C:\cmake-3.8.0-win32-x86\bin\cmake.exe")) {
+ Start-FileDownload 'https://cmake.org/files/v3.8/cmake-3.8.0-win32-x86.zip'
+ 7z x -y -bso0 cmake-3.8.0-win32-x86.zip -oC:\
}
- $env:PATH="C:\cmake-3.14.4-win32-x86\bin;$env:PATH"
+ $env:PATH="C:\cmake-3.8.0-win32-x86\bin;$env:PATH"
}
before_build:
@@ -74,20 +72,16 @@ before_build:
$Architecture = $env:PLATFORM
if ("$env:APPVEYOR_BUILD_WORKER_IMAGE" -eq "Visual Studio 2015") {
$env:VCVARSALL = "`"$env:VCVAR2015`" $Architecture"
- } elseif ("$env:APPVEYOR_BUILD_WORKER_IMAGE" -eq "Visual Studio 2017") {
- $env:VCVARSALL = "`"$env:VCVAR2017`" $Architecture"
} else {
- $env:VCVARSALL = "`"$env:VCVAR2019`" $Architecture"
+ $env:VCVARSALL = "`"$env:VCVAR2017`" $Architecture"
}
$env:CMakeGenFlags = "-G Ninja -DGSL_CXX_STANDARD=$env:GSL_CXX_STANDARD"
} else {
$GeneratorFlags = '/m /v:minimal'
if ("$env:APPVEYOR_BUILD_WORKER_IMAGE" -eq "Visual Studio 2015") {
$Generator = 'Visual Studio 14 2015'
- } elseif ("$env:APPVEYOR_BUILD_WORKER_IMAGE" -eq "Visual Studio 2017") {
- $Generator = 'Visual Studio 15 2017'
} else {
- $Generator = 'Visual Studio 16 2019'
+ $Generator = 'Visual Studio 15 2017'
}
if ("$env:PLATFORM" -eq "x86") {
$Architecture = "Win32"
diff --git a/include/gsl/gsl_byte b/include/gsl/gsl_byte
index 1670646..861446d 100644
--- a/include/gsl/gsl_byte
+++ b/include/gsl/gsl_byte
@@ -56,7 +56,6 @@
#else // _MSC_VER
#ifndef GSL_USE_STD_BYTE
-#include <cstddef> /* __cpp_lib_byte */
// this tests if we are under GCC or Clang with enough -std:c++1z power to get us std::byte
// also check if libc++ version is sufficient (> 5.0) or libstc++ actually contains std::byte
#if defined(__cplusplus) && (__cplusplus >= 201703L) && \
@@ -64,6 +63,7 @@
defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 5000))
#define GSL_USE_STD_BYTE 1
+#include <cstddef>
#else // defined(__cplusplus) && (__cplusplus >= 201703L) &&
// (defined(__cpp_lib_byte) && (__cpp_lib_byte >= 201603) ||
diff --git a/include/gsl/gsl_util b/include/gsl/gsl_util
index e4b2daa..4addde6 100644
--- a/include/gsl/gsl_util
+++ b/include/gsl/gsl_util
@@ -24,7 +24,7 @@
#include <exception> // for exception
#include <initializer_list> // for initializer_list
#include <type_traits> // for is_signed, integral_constant
-#include <utility> // for exchange, forward
+#include <utility> // for forward
#if defined(_MSC_VER) && !defined(__clang__)
@@ -37,7 +37,7 @@
#endif // _MSC_VER < 1910
#endif // _MSC_VER
-#if (defined(_MSC_VER) && _MSC_VER < 1910) || (!defined(__clang__) && defined(__GNUC__) && __GNUC__ < 6)
+#if (defined(_MSC_VER) && _MSC_VER < 1910) || (!defined(__clang__) && defined(__GNUC__) && __GUNC__ < 6)
#define GSL_CONSTEXPR_NARROW 0
#else
#define GSL_CONSTEXPR_NARROW 1
@@ -59,7 +59,10 @@ class final_action
public:
explicit final_action(F f) noexcept : f_(std::move(f)) {}
- final_action(final_action&& other) noexcept : f_(std::move(other.f_)), invoke_(std::exchange(other.invoke_, false)) {}
+ final_action(final_action&& other) noexcept : f_(std::move(other.f_)), invoke_(other.invoke_)
+ {
+ other.invoke_ = false;
+ }
final_action(const final_action&) = delete;
final_action& operator=(const final_action&) = delete;
diff --git a/include/gsl/multi_span b/include/gsl/multi_span
index 3a2d982..f1a909e 100644
--- a/include/gsl/multi_span
+++ b/include/gsl/multi_span
@@ -23,6 +23,7 @@
#include <algorithm> // for transform, lexicographical_compare
#include <array> // for array
+#include <cassert>
#include <cstddef> // for ptrdiff_t, size_t, nullptr_t
#include <cstdint> // for PTRDIFF_MAX
#include <functional> // for divides, multiplies, minus, negate, plus
@@ -48,19 +49,13 @@
#pragma warning(disable : 26473) // in some instantiations we cast to the same type
#pragma warning(disable : 26490) // TODO: bug in parser - attributes and templates
#pragma warning(disable : 26465) // TODO: bug - suppression does not work on template functions
-#pragma warning(disable : 4996) // use of function or classes marked [[deprecated]]
#if _MSC_VER < 1910
#pragma push_macro("constexpr")
#define constexpr /*constexpr*/
-#endif // _MSC_VER < 1910
-#endif // _MSC_VER
-
-#if __clang__ || __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
+#endif // _MSC_VER < 1910
+#endif // _MSC_VER
// GCC 7 does not like the signed unsigned missmatch (size_t ptrdiff_t)
// While there is a conversion from signed to unsigned, it happens at
@@ -81,18 +76,18 @@ namespace gsl
namespace details
{
template <typename SizeType>
- struct [[deprecated]] SizeTypeTraits
+ struct SizeTypeTraits
{
static const SizeType max_value = std::numeric_limits<SizeType>::max();
};
template <typename... Ts>
- class [[deprecated]] are_integral : public std::integral_constant<bool, true>
+ class are_integral : public std::integral_constant<bool, true>
{
};
template <typename T, typename... Ts>
- class [[deprecated]] are_integral<T, Ts...>
+ class are_integral<T, Ts...>
: public std::integral_constant<bool,
std::is_integral<T>::value && are_integral<Ts...>::value>
{
@@ -100,7 +95,8 @@ namespace details
} // namespace details
template <std::size_t Rank>
-class [[deprecated]] multi_span_index final {
+class multi_span_index final
+{
static_assert(Rank > 0, "Rank must be greater than 0!");
template <std::size_t OtherRank>
@@ -115,7 +111,7 @@ public:
constexpr multi_span_index() noexcept {}
- constexpr multi_span_index(const value_type(&values)[Rank]) noexcept
+ constexpr multi_span_index(const value_type (&values)[Rank]) noexcept
{
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
GSL_SUPPRESS(bounds.3) // NO-FORMAT: attribute
@@ -143,7 +139,7 @@ public:
// Preconditions: component_idx < rank
GSL_SUPPRESS(bounds.2) // NO-FORMAT: attribute
GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
- constexpr const_reference operator[](std::size_t component_idx) const
+ constexpr const_reference operator[](std::size_t component_idx) const
{
Expects(component_idx < Rank); // Component index must be less than rank
return elems[component_idx];
@@ -156,7 +152,10 @@ public:
return std::equal(elems, elems + rank, rhs.elems);
}
- constexpr bool operator!=(const multi_span_index& rhs) const { return !(*this == rhs); }
+ constexpr bool operator!=(const multi_span_index& rhs) const
+ {
+ return !(*this == rhs);
+ }
constexpr multi_span_index operator+() const noexcept { return *this; }
@@ -185,7 +184,8 @@ public:
{
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
GSL_SUPPRESS(bounds.3) // NO-FORMAT: attribute
- std::transform(elems, elems + rank, rhs.elems, elems, std::plus<value_type>{});
+ std::transform(elems, elems + rank, rhs.elems, elems,
+ std::plus<value_type>{});
return *this;
}
@@ -240,7 +240,7 @@ private:
#if !defined(_MSC_VER) || _MSC_VER >= 1910
-struct [[deprecated]] static_bounds_dynamic_range_t
+struct static_bounds_dynamic_range_t
{
template <typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
constexpr operator T() const noexcept
@@ -288,22 +288,25 @@ constexpr static_bounds_dynamic_range_t dynamic_range{};
const std::ptrdiff_t dynamic_range = -1;
#endif
-struct [[deprecated]] generalized_mapping_tag
+struct generalized_mapping_tag
+{
+};
+struct contiguous_mapping_tag : generalized_mapping_tag
{
};
-struct[[deprecated]] contiguous_mapping_tag : generalized_mapping_tag{};
namespace details
{
template <std::ptrdiff_t Left, std::ptrdiff_t Right>
- struct [[deprecated]] LessThan
+ struct LessThan
{
static const bool value = Left < Right;
};
template <std::ptrdiff_t... Ranges>
- struct [[deprecated]] BoundsRanges {
+ struct BoundsRanges
+ {
using size_type = std::ptrdiff_t;
static const size_type Depth = 0;
static const size_type DynamicNum = 0;
@@ -342,7 +345,7 @@ namespace details
};
template <std::ptrdiff_t... RestRanges>
- struct[[deprecated]] BoundsRanges<dynamic_range, RestRanges...> : BoundsRanges<RestRanges...>
+ struct BoundsRanges<dynamic_range, RestRanges...> : BoundsRanges<RestRanges...>
{
using Base = BoundsRanges<RestRanges...>;
using size_type = std::ptrdiff_t;
@@ -355,9 +358,8 @@ namespace details
size_type m_bound;
public:
- GSL_SUPPRESS(
- f.23) // NO-FORMAT: attribute // this pointer type is cannot be assigned nullptr - issue in not_null
- GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
+ GSL_SUPPRESS(f.23) // NO-FORMAT: attribute // this pointer type is cannot be assigned nullptr - issue in not_null
+ GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
constexpr BoundsRanges(const std::ptrdiff_t* const arr)
: Base(arr + 1), m_bound(*arr * this->Base::totalSize())
{
@@ -368,13 +370,13 @@ namespace details
template <std::ptrdiff_t OtherRange, std::ptrdiff_t... RestOtherRanges>
constexpr BoundsRanges(const BoundsRanges<OtherRange, RestOtherRanges...>& other,
- bool /* firstLevel */ = true)
+ bool /* firstLevel */ = true)
: Base(static_cast<const BoundsRanges<RestOtherRanges...>&>(other), false)
, m_bound(other.totalSize())
{}
template <typename T, std::size_t Dim = 0>
- constexpr void serialize(T & arr) const
+ constexpr void serialize(T& arr) const
{
arr[Dim] = elementNum();
this->Base::template serialize<T, Dim + 1>(arr);
@@ -398,19 +400,19 @@ namespace details
return cur < m_bound ? cur + last : -1;
}
- GSL_SUPPRESS(
- c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
- constexpr size_type totalSize() const noexcept { return m_bound; }
+ GSL_SUPPRESS(c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
+ constexpr size_type totalSize() const noexcept
+ {
+ return m_bound;
+ }
- GSL_SUPPRESS(
- c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
+ GSL_SUPPRESS(c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
constexpr size_type elementNum() const noexcept
{
return totalSize() / this->Base::totalSize();
}
- GSL_SUPPRESS(
- c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
+ GSL_SUPPRESS(c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
constexpr size_type elementNum(std::size_t dim) const noexcept
{
if (dim > 0)
@@ -427,7 +429,7 @@ namespace details
};
template <std::ptrdiff_t CurRange, std::ptrdiff_t... RestRanges>
- struct[[deprecated]] BoundsRanges<CurRange, RestRanges...> : BoundsRanges<RestRanges...>
+ struct BoundsRanges<CurRange, RestRanges...> : BoundsRanges<RestRanges...>
{
using Base = BoundsRanges<RestRanges...>;
using size_type = std::ptrdiff_t;
@@ -442,7 +444,7 @@ namespace details
template <std::ptrdiff_t OtherRange, std::ptrdiff_t... RestOtherRanges>
constexpr BoundsRanges(const BoundsRanges<OtherRange, RestOtherRanges...>& other,
- bool firstLevel = true)
+ bool firstLevel = true)
: Base(static_cast<const BoundsRanges<RestOtherRanges...>&>(other), false)
{
GSL_SUPPRESS(type.4) // NO-FORMAT: attribute // TODO: false positive
@@ -450,7 +452,7 @@ namespace details
}
template <typename T, std::size_t Dim = 0>
- constexpr void serialize(T & arr) const
+ constexpr void serialize(T& arr) const
{
arr[Dim] = elementNum();
this->Base::template serialize<T, Dim + 1>(arr);
@@ -459,11 +461,12 @@ namespace details
template <typename T, std::size_t Dim = 0>
constexpr size_type linearize(const T& arr) const
{
- GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
+ GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
Expects(arr[Dim] >= 0 && arr[Dim] < CurrentRange); // Index is out of range
- GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
+ GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
const ptrdiff_t d = arr[Dim];
- return this->Base::totalSize() * d + this->Base::template linearize<T, Dim + 1>(arr);
+ return this->Base::totalSize() * d +
+ this->Base::template linearize<T, Dim + 1>(arr);
}
template <typename T, std::size_t Dim = 0>
@@ -475,19 +478,19 @@ namespace details
return this->Base::totalSize() * arr[Dim] + last;
}
- GSL_SUPPRESS(
- c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
+ GSL_SUPPRESS(c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
constexpr size_type totalSize() const noexcept
{
return CurrentRange * this->Base::totalSize();
}
- GSL_SUPPRESS(
- c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
- constexpr size_type elementNum() const noexcept { return CurrentRange; }
+ GSL_SUPPRESS(c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
+ constexpr size_type elementNum() const noexcept
+ {
+ return CurrentRange;
+ }
- GSL_SUPPRESS(
- c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
+ GSL_SUPPRESS(c.128) // NO-FORMAT: attribute // no pointers to BoundsRanges should be ever used
constexpr size_type elementNum(std::size_t dim) const noexcept
{
if (dim > 0)
@@ -503,40 +506,43 @@ namespace details
};
template <typename SourceType, typename TargetType>
- struct[[deprecated]] BoundsRangeConvertible
+ struct BoundsRangeConvertible
: public std::integral_constant<bool, (SourceType::TotalSize >= TargetType::TotalSize ||
TargetType::TotalSize == dynamic_range ||
SourceType::TotalSize == dynamic_range ||
- TargetType::TotalSize == 0)>{};
+ TargetType::TotalSize == 0)>
+ {
+ };
template <typename TypeChain>
- struct [[deprecated]] TypeListIndexer {
+ struct TypeListIndexer
+ {
const TypeChain& obj_;
- constexpr TypeListIndexer(const TypeChain& obj) : obj_(obj) {}
+ TypeListIndexer(const TypeChain& obj) : obj_(obj) {}
template <std::size_t N>
- constexpr const TypeChain& getObj(std::true_type)
+ const TypeChain& getObj(std::true_type)
{
return obj_;
}
template <std::size_t N, typename MyChain = TypeChain,
typename MyBase = typename MyChain::Base>
- constexpr auto getObj(std::false_type)
- ->decltype(TypeListIndexer<MyBase>(static_cast<const MyBase&>(obj_)).template get<N>())
+ auto getObj(std::false_type)
+ -> decltype(TypeListIndexer<MyBase>(static_cast<const MyBase&>(obj_)).template get<N>())
{
return TypeListIndexer<MyBase>(static_cast<const MyBase&>(obj_)).template get<N>();
}
template <std::size_t N>
- constexpr auto get()->decltype(getObj<N - 1>(std::integral_constant<bool, N == 0>()))
+ auto get() -> decltype(getObj<N - 1>(std::integral_constant<bool, N == 0>()))
{
return getObj<N - 1>(std::integral_constant<bool, N == 0>());
}
};
template <typename TypeChain>
- constexpr TypeListIndexer<TypeChain> createTypeListIndexer(const TypeChain& obj)
+ TypeListIndexer<TypeChain> createTypeListIndexer(const TypeChain& obj)
{
return TypeListIndexer<TypeChain>(obj);
}
@@ -549,23 +555,24 @@ namespace details
for (std::size_t i = 0; i < Rank - 1; ++i)
{
GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
- ret[i] = other[i + 1];
+ ret[i] = other[i + 1];
}
return ret;
}
} // namespace details
template <typename IndexType>
-class [[deprecated]] bounds_iterator;
+class bounds_iterator;
template <std::ptrdiff_t... Ranges>
-class [[deprecated]] static_bounds {
+class static_bounds
+{
public:
static_bounds(const details::BoundsRanges<Ranges...>&) {}
};
template <std::ptrdiff_t FirstRange, std::ptrdiff_t... RestRanges>
-class[[deprecated]] static_bounds<FirstRange, RestRanges...>
+class static_bounds<FirstRange, RestRanges...>
{
using MyRanges = details::BoundsRanges<FirstRange, RestRanges...>;
@@ -597,10 +604,10 @@ public:
template <std::size_t Rank, typename SourceType, typename TargetType,
typename Ret = BoundsRangeConvertible2<typename SourceType::Base,
typename TargetType::Base, Rank>>
- static auto helpBoundsRangeConvertible(SourceType, TargetType, std::true_type)->Ret;
+ static auto helpBoundsRangeConvertible(SourceType, TargetType, std::true_type) -> Ret;
template <std::size_t Rank, typename SourceType, typename TargetType>
- static auto helpBoundsRangeConvertible(SourceType, TargetType, ...)->std::false_type;
+ static auto helpBoundsRangeConvertible(SourceType, TargetType, ...) -> std::false_type;
template <typename SourceType, typename TargetType, std::size_t Rank>
struct BoundsRangeConvertible2
@@ -717,7 +724,10 @@ public:
return !(*this == rhs);
}
- constexpr const_iterator begin() const noexcept { return const_iterator(*this, index_type{}); }
+ constexpr const_iterator begin() const noexcept
+ {
+ return const_iterator(*this, index_type{});
+ }
constexpr const_iterator end() const noexcept
{
@@ -726,7 +736,7 @@ public:
};
template <std::size_t Rank>
-class [[deprecated]] strided_bounds {
+class strided_bounds {
template <std::size_t OtherRank>
friend class strided_bounds;
@@ -750,13 +760,14 @@ public:
constexpr strided_bounds& operator=(const strided_bounds&) noexcept = default;
- constexpr strided_bounds(const value_type(&values)[rank], index_type strides)
+ constexpr strided_bounds(const value_type (&values)[rank], index_type strides)
: m_extents(values), m_strides(std::move(strides))
{}
constexpr strided_bounds(const index_type& extents, const index_type& strides) noexcept
: m_extents(extents), m_strides(strides)
- {}
+ {
+ }
constexpr index_type strides() const noexcept { return m_strides; }
@@ -828,14 +839,21 @@ private:
};
template <typename T>
-struct[[deprecated]] is_bounds : std::integral_constant<bool, false>{};
+struct is_bounds : std::integral_constant<bool, false>
+{
+};
template <std::ptrdiff_t... Ranges>
-struct[[deprecated]] is_bounds<static_bounds<Ranges...>> : std::integral_constant<bool, true>{};
+struct is_bounds<static_bounds<Ranges...>> : std::integral_constant<bool, true>
+{
+};
template <std::size_t Rank>
-struct[[deprecated]] is_bounds<strided_bounds<Rank>> : std::integral_constant<bool, true>{};
+struct is_bounds<strided_bounds<Rank>> : std::integral_constant<bool, true>
+{
+};
template <typename IndexType>
-class [[deprecated]] bounds_iterator {
+class bounds_iterator
+{
public:
static const std::size_t rank = IndexType::rank;
using iterator_category = std::random_access_iterator_tag;
@@ -956,6 +974,7 @@ public:
return curr_ == rhs.curr_;
}
+
constexpr bool operator!=(const bounds_iterator& rhs) const noexcept { return !(*this == rhs); }
constexpr bool operator<(const bounds_iterator& rhs) const noexcept
@@ -969,15 +988,16 @@ public:
constexpr bool operator>=(const bounds_iterator& rhs) const noexcept { return !(rhs > *this); }
- void swap(bounds_iterator & rhs) noexcept
+ void swap(bounds_iterator& rhs) noexcept
{
std::swap(boundary_, rhs.boundary_);
std::swap(curr_, rhs.curr_);
}
private:
+
GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
- constexpr bool less(index_type & one, index_type & other) const noexcept
+ constexpr bool less(index_type& one, index_type& other) const noexcept
{
for (std::size_t i = 0; i < rank; ++i)
{
@@ -1072,17 +1092,17 @@ namespace details
} // namespace details
template <typename Span>
-class [[deprecated]] contiguous_span_iterator;
+class contiguous_span_iterator;
template <typename Span>
-class [[deprecated]] general_span_iterator;
+class general_span_iterator;
template <std::ptrdiff_t DimSize = dynamic_range>
-struct [[deprecated]] dim_t
+struct dim_t
{
static const std::ptrdiff_t value = DimSize;
};
template <>
-struct [[deprecated]] dim_t<dynamic_range>
+struct dim_t<dynamic_range>
{
static const std::ptrdiff_t value = dynamic_range;
const std::ptrdiff_t dvalue;
@@ -1103,30 +1123,28 @@ constexpr dim_t<N> dim(std::ptrdiff_t n) noexcept
template <typename ValueType, std::ptrdiff_t FirstDimension = dynamic_range,
std::ptrdiff_t... RestDimensions>
-class [[deprecated("gsl::multi_span is deprecated because it is not in the C++ Core Guidelines")]] multi_span;
-
+class multi_span;
template <typename ValueType, std::size_t Rank>
-class [[deprecated("gsl::strided_span is deprecated because it is not in the C++ Core Guidelines")]] strided_span;
+class strided_span;
namespace details
{
template <typename T, typename = std::true_type>
- struct [[deprecated]] SpanTypeTraits
+ struct SpanTypeTraits
{
using value_type = T;
using size_type = std::size_t;
};
template <typename Traits>
- struct [[deprecated]] SpanTypeTraits<
- Traits, typename std::is_reference<typename Traits::span_traits&>::type>
+ struct SpanTypeTraits<Traits, typename std::is_reference<typename Traits::span_traits&>::type>
{
using value_type = typename Traits::span_traits::value_type;
using size_type = typename Traits::span_traits::size_type;
};
template <typename T, std::ptrdiff_t... Ranks>
- struct [[deprecated]] SpanArrayTraits
+ struct SpanArrayTraits
{
using type = multi_span<T, Ranks...>;
using value_type = T;
@@ -1135,7 +1153,7 @@ namespace details
using reference = T&;
};
template <typename T, std::ptrdiff_t N, std::ptrdiff_t... Ranks>
- struct [[deprecated]] SpanArrayTraits<T[N], Ranks...> : SpanArrayTraits<T, Ranks..., N>
+ struct SpanArrayTraits<T[N], Ranks...> : SpanArrayTraits<T, Ranks..., N>
{
};
@@ -1159,7 +1177,7 @@ namespace details
totalSize, std::integral_constant<bool, BoundsType::dynamic_rank == 1>());
}
- struct [[deprecated]] Sep
+ struct Sep
{
};
@@ -1182,35 +1200,36 @@ namespace details
}
template <typename... Dimensions>
- struct [[deprecated]] static_as_multi_span_static_bounds_helper
+ struct static_as_multi_span_static_bounds_helper
{
using type = static_bounds<(Dimensions::value)...>;
};
template <typename T>
- struct [[deprecated]] is_multi_span_oracle : std::false_type
+ struct is_multi_span_oracle : std::false_type
{
};
template <typename ValueType, std::ptrdiff_t FirstDimension, std::ptrdiff_t... RestDimensions>
- struct [[deprecated]] is_multi_span_oracle<multi_span<ValueType, FirstDimension, RestDimensions...>>
+ struct is_multi_span_oracle<multi_span<ValueType, FirstDimension, RestDimensions...>>
: std::true_type
{
};
template <typename ValueType, std::ptrdiff_t Rank>
- struct [[deprecated]] is_multi_span_oracle<strided_span<ValueType, Rank>> : std::true_type
+ struct is_multi_span_oracle<strided_span<ValueType, Rank>> : std::true_type
{
};
template <typename T>
- struct [[deprecated]] is_multi_span : is_multi_span_oracle<std::remove_cv_t<T>>
+ struct is_multi_span : is_multi_span_oracle<std::remove_cv_t<T>>
{
};
} // namespace details
template <typename ValueType, std::ptrdiff_t FirstDimension, std::ptrdiff_t... RestDimensions>
-class [[deprecated("gsl::multi_span is deprecated because it is not in the C++ Core Guidelines")]] multi_span {
+class multi_span
+{
// TODO do we still need this?
template <typename ValueType2, std::ptrdiff_t FirstDimension2,
std::ptrdiff_t... RestDimensions2>
@@ -1243,7 +1262,8 @@ private:
public:
// default constructor - same as constructing from nullptr_t
GSL_SUPPRESS(type.6) // NO-FORMAT: attribute // TODO: false positive
- constexpr multi_span() noexcept : multi_span(nullptr, bounds_type{})
+ constexpr multi_span() noexcept
+ : multi_span(nullptr, bounds_type{})
{
static_assert(bounds_type::dynamic_rank != 0 ||
(bounds_type::dynamic_rank == 0 && bounds_type::static_size == 0),
@@ -1253,7 +1273,8 @@ public:
// construct from nullptr - get an empty multi_span
GSL_SUPPRESS(type.6) // NO-FORMAT: attribute // TODO: false positive
- constexpr multi_span(std::nullptr_t) noexcept : multi_span(nullptr, bounds_type{})
+ constexpr multi_span(std::nullptr_t) noexcept
+ : multi_span(nullptr, bounds_type{})
{
static_assert(bounds_type::dynamic_rank != 0 ||
(bounds_type::dynamic_rank == 0 && bounds_type::static_size == 0),
@@ -1277,7 +1298,8 @@ public:
// construct from a single element
GSL_SUPPRESS(type.6) // NO-FORMAT: attribute // TODO: false positive
- constexpr multi_span(reference data) noexcept : multi_span(&data, bounds_type{1})
+ constexpr multi_span(reference data) noexcept
+ : multi_span(&data, bounds_type{1})
{
static_assert(bounds_type::dynamic_rank > 0 || bounds_type::static_size == 0 ||
bounds_type::static_size == 1,
@@ -1286,14 +1308,17 @@ public:
}
// prevent constructing from temporaries for single-elements
- constexpr multi_span(value_type &&) = delete;
+ constexpr multi_span(value_type&&) = delete;
// construct from pointer + length
GSL_SUPPRESS(type.6) // NO-FORMAT: attribute // TODO: false positive
- constexpr multi_span(pointer ptr, size_type size) : multi_span(ptr, bounds_type{size}) {}
+ constexpr multi_span(pointer ptr, size_type size)
+ : multi_span(ptr, bounds_type{size})
+ {}
// construct from pointer + length - multidimensional
- constexpr multi_span(pointer data, bounds_type bounds) : data_(data), bounds_(std::move(bounds))
+ constexpr multi_span(pointer data, bounds_type bounds)
+ : data_(data), bounds_(std::move(bounds))
{
Expects((bounds_.size() > 0 && data != nullptr) || bounds_.size() == 0);
}
@@ -1311,7 +1336,7 @@ public:
// construct from n-dimensions static array
template <typename T, std::size_t N, typename Helper = details::SpanArrayTraits<T, N>>
- constexpr multi_span(T(&arr)[N])
+ constexpr multi_span(T (&arr)[N])
: multi_span(reinterpret_cast<pointer>(arr), bounds_type{typename Helper::bounds_type{}})
{
static_assert(std::is_convertible<typename Helper::value_type(*)[], value_type(*)[]>::value,
@@ -1332,7 +1357,7 @@ public:
// construct from std::array
template <typename T, std::size_t N>
- constexpr multi_span(std::array<T, N> & arr)
+ constexpr multi_span(std::array<T, N>& arr)
: multi_span(arr.data(), bounds_type{static_bounds<N>{}})
{
static_assert(
@@ -1356,7 +1381,7 @@ public:
// prevent constructing from temporary std::array
template <typename T, std::size_t N>
- constexpr multi_span(std::array<T, N> && arr) = delete;
+ constexpr multi_span(std::array<T, N>&& arr) = delete;
// construct from containers
// future: could use contiguous_iterator_traits to identify only contiguous containers
@@ -1364,11 +1389,11 @@ public:
template <typename Cont, typename DataType = typename Cont::value_type,
typename = std::enable_if_t<
!details::is_multi_span<Cont>::value &&
- std::is_convertible<DataType(*)[], value_type(*)[]>::value &&
+ std::is_convertible<DataType (*)[], value_type (*)[]>::value &&
std::is_same<std::decay_t<decltype(std::declval<Cont>().size(),
*std::declval<Cont>().data())>,
DataType>::value>>
- constexpr multi_span(Cont & cont)
+ constexpr multi_span(Cont& cont)
: multi_span(static_cast<pointer>(cont.data()),
details::newBoundsHelper<bounds_type>(narrow_cast<size_type>(cont.size())))
{}
@@ -1377,11 +1402,11 @@ public:
template <typename Cont, typename DataType = typename Cont::value_type,
typename = std::enable_if_t<
!details::is_multi_span<Cont>::value &&
- std::is_convertible<DataType(*)[], value_type(*)[]>::value &&
+ std::is_convertible<DataType (*)[], value_type (*)[]>::value &&
std::is_same<std::decay_t<decltype(std::declval<Cont>().size(),
*std::declval<Cont>().data())>,
DataType>::value>>
- explicit constexpr multi_span(Cont && cont) = delete;
+ explicit constexpr multi_span(Cont&& cont) = delete;
// construct from a convertible multi_span
template <typename OtherValueType, std::ptrdiff_t... OtherDimensions,
@@ -1394,7 +1419,7 @@ public:
// trivial copy and move
constexpr multi_span(const multi_span&) = default;
- constexpr multi_span(multi_span &&) = default;
+ constexpr multi_span(multi_span&&) = default;
// trivial assignment
constexpr multi_span& operator=(const multi_span&) = default;
@@ -1468,7 +1493,8 @@ public:
}
// section - creates a non-contiguous, strided multi_span from a contiguous one
- constexpr strided_span<ValueType, Rank> section(index_type origin, index_type extents) const
+ constexpr strided_span<ValueType, Rank> section(index_type origin,
+ index_type extents) const
{
const size_type size = this->bounds().total_size() - this->bounds().linearize(origin);
return {&this->operator[](origin), size,
@@ -1610,8 +1636,8 @@ public:
template <typename OtherValueType, std::ptrdiff_t... OtherDimensions,
typename = std::enable_if_t<std::is_same<std::remove_cv_t<value_type>,
std::remove_cv_t<OtherValueType>>::value>>
- constexpr bool operator>(const multi_span<OtherValueType, OtherDimensions...>& other)
- const noexcept
+ constexpr bool operator>(const multi_span<OtherValueType, OtherDimensions...>& other) const
+ noexcept
{
return (other < *this);
}
@@ -1647,8 +1673,7 @@ constexpr auto as_multi_span(SpanType s, Dimensions2... dims)
// convert a multi_span<T> to a multi_span<const byte>
template <typename U, std::ptrdiff_t... Dimensions>
-multi_span<const byte, dynamic_range>
-as_bytes(multi_span<U, Dimensions...> s) noexcept
+multi_span<const byte, dynamic_range> as_bytes(multi_span<U, Dimensions...> s) noexcept
{
static_assert(std::is_trivial<std::decay_t<U>>::value,
"The value_type of multi_span must be a trivial type.");
@@ -1734,8 +1759,7 @@ constexpr auto as_multi_span(T* arr, std::ptrdiff_t len) ->
}
template <typename T, std::size_t N>
-constexpr auto as_multi_span(T (&arr)[N]) ->
- typename details::SpanArrayTraits<T, N>::type
+constexpr auto as_multi_span(T (&arr)[N]) -> typename details::SpanArrayTraits<T, N>::type
{
return {arr};
}
@@ -1788,7 +1812,7 @@ constexpr auto as_multi_span(std::basic_string<CharT, Traits, Allocator>& str)
// strided_span is an extension that is not strictly part of the GSL at this time.
// It is kept here while the multidimensional interface is still being defined.
template <typename ValueType, std::size_t Rank>
-class [[deprecated("gsl::strided_span is deprecated because it is not in the C++ Core Guidelines")]] strided_span
+class strided_span
{
public:
using bounds_type = strided_bounds<Rank>;
@@ -2031,7 +2055,8 @@ private:
};
template <class Span>
-class [[deprecated]] contiguous_span_iterator {
+class contiguous_span_iterator
+{
public:
using iterator_category = std::random_access_iterator_tag;
using value_type = typename Span::value_type;
@@ -2047,8 +2072,7 @@ private:
const Span* m_validator;
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
- void validateThis() const
- {
+ void validateThis() const {
// iterator is out of range of the array
Expects(data_ >= m_validator->data_ && data_ < m_validator->data_ + m_validator->size());
}
@@ -2137,7 +2161,7 @@ public:
bool operator>(const contiguous_span_iterator& rhs) const { return rhs < *this; }
bool operator>=(const contiguous_span_iterator& rhs) const { return !(rhs > *this); }
- void swap(contiguous_span_iterator & rhs) noexcept
+ void swap(contiguous_span_iterator& rhs) noexcept
{
std::swap(data_, rhs.data_);
std::swap(m_validator, rhs.m_validator);
@@ -2152,7 +2176,7 @@ contiguous_span_iterator<Span> operator+(typename contiguous_span_iterator<Span>
}
template <typename Span>
-class [[deprecated]] general_span_iterator {
+class general_span_iterator {
public:
using iterator_category = std::random_access_iterator_tag;
using value_type = typename Span::value_type;
@@ -2235,7 +2259,7 @@ public:
bool operator<=(const general_span_iterator& rhs) const { return !(rhs < *this); }
bool operator>(const general_span_iterator& rhs) const { return rhs < *this; }
bool operator>=(const general_span_iterator& rhs) const { return !(rhs > *this); }
- void swap(general_span_iterator & rhs) noexcept
+ void swap(general_span_iterator& rhs) noexcept
{
std::swap(m_itr, rhs.m_itr);
std::swap(m_container, rhs.m_container);
@@ -2266,8 +2290,4 @@ general_span_iterator<Span> operator+(typename general_span_iterator<Span>::diff
#pragma GCC diagnostic pop
#endif // __GNUC__ > 6
-#if __clang__ || __GNUC__
-#pragma GCC diagnostic pop
-#endif
-
#endif // GSL_MULTI_SPAN_H
diff --git a/include/gsl/pointers b/include/gsl/pointers
index 7373826..0f2987a 100644
--- a/include/gsl/pointers
+++ b/include/gsl/pointers
@@ -197,7 +197,7 @@ namespace gsl
//
// Restricts a pointer or smart pointer to only hold non-null values,
//
-// - provides a strict (i.e. explicit constructor from T) wrapper of not_null
+// - provides a strict (i.e. explicit contructor from T) wrapper of not_null
// - to be used for new code that wishes the design to be cleaner and make not_null
// checks intentional, or in old code that would like to make the transition.
//
@@ -205,9 +205,9 @@ namespace gsl
// by strict_not_null and fix compilation errors
//
// Expect to
-// - remove all unneeded conversions from raw pointer to not_null and back
-// - make API clear by specifying not_null in parameters where needed
-// - remove unnecessary asserts
+// - remove all unneded conversions from raw pointer to not_null and back
+// - make API clear by specifyning not_null in parameters where needed
+// - remove unnesessary asserts
//
template <class T>
class strict_not_null: public not_null<T>
diff --git a/include/gsl/span b/include/gsl/span
index 59bd121..b4da532 100644
--- a/include/gsl/span
+++ b/include/gsl/span
@@ -141,7 +141,7 @@ namespace details
span_iterator() = default;
- constexpr span_iterator(const Span* span, difference_type idx) noexcept
+ constexpr span_iterator(const Span* span, typename Span::index_type idx) noexcept
: span_(span), index_(idx)
{}
diff --git a/include/gsl/string_span b/include/gsl/string_span
index 37cbe15..b5dfd18 100644
--- a/include/gsl/string_span
+++ b/include/gsl/string_span
@@ -20,6 +20,7 @@
#include <gsl/gsl_assert> // for Ensures, Expects
#include <gsl/gsl_util> // for narrow_cast
#include <gsl/span> // for operator!=, operator==, dynamic_extent
+#include <gsl/pointers> // for not_null
#include <algorithm> // for equal, lexicographical_compare
#include <array> // for array
@@ -174,7 +175,6 @@ class basic_string_span
{
public:
using element_type = CharT;
- using value_type = std::remove_cv_t<element_type>;
using pointer = std::add_pointer_t<element_type>;
using reference = std::add_lvalue_reference_t<element_type>;
using const_reference = std::add_lvalue_reference_t<std::add_const_t<element_type>>;
@@ -186,8 +186,6 @@ public:
using reverse_iterator = typename impl_type::reverse_iterator;
using const_reverse_iterator = typename impl_type::const_reverse_iterator;
- using size_type = index_type;
-
// default (empty)
constexpr basic_string_span() noexcept = default;
diff --git a/tests/bounds_tests.cpp b/tests/bounds_tests.cpp
index d72e31a..e586d44 100644
--- a/tests/bounds_tests.cpp
+++ b/tests/bounds_tests.cpp
@@ -18,12 +18,6 @@
// blanket turn off warnings from CppCoreCheck from catch
// so people aren't annoyed by them when running the tool.
#pragma warning(disable : 26440 26426) // from catch
-#pragma warning(disable : 4996) // use of function or classes marked [[deprecated]]
-#endif
-
-#if __clang__ || __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
#include <catch/catch.hpp> // for AssertionHandler, StringRef, TEST_CASE
@@ -119,7 +113,3 @@ TEST_CASE("bounds_convertible")
#ifdef CONFIRM_COMPILATION_ERRORS
copy(src_span_static, dst_span_static);
#endif
-
-#if __clang__ || __GNUC__
-#pragma GCC diagnostic pop
-#endif
diff --git a/tests/multi_span_tests.cpp b/tests/multi_span_tests.cpp
index 0aa0ff9..7e3ec89 100644
--- a/tests/multi_span_tests.cpp
+++ b/tests/multi_span_tests.cpp
@@ -17,14 +17,8 @@
#ifdef _MSC_VER
// blanket turn off warnings from CppCoreCheck from catch
// so people aren't annoyed by them when running the tool.
-#pragma warning(disable : 26440 26426) // from catch
-#pragma warning(disable : 4996) // multi_span is in the process of being deprecated.
- // Suppressing warnings until it is completely removed
-#endif
+#pragma warning(disable : 26440 26426) // from catch
-#if __clang__ || __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
#include <catch/catch.hpp> // for AssertionHandler, StringRef, CHECK, CHECK...
@@ -1226,8 +1220,6 @@ TEST_CASE("md_access")
expected += 3;
}
}
-
- delete[] image_ptr;
}
GSL_SUPPRESS(con.4) // NO-FORMAT: attribute
@@ -1624,8 +1616,6 @@ TEST_CASE("span_structure_size")
multi_span<const double, dynamic_range, 6, 4> av2 =
as_multi_span(av1, dim(5), dim<6>(), dim<4>());
(void) av2;
-
- delete[] arr;
}
GSL_SUPPRESS(con.4) // NO-FORMAT: attribute
@@ -1793,7 +1783,3 @@ TEST_CASE("iterator")
#ifdef CONFIRM_COMPILATION_ERRORS
copy(src_span_static, dst_span_static);
#endif
-
-#if __clang__ || __GNUC__
-#pragma GCC diagnostic pop
-#endif
diff --git a/tests/notnull_tests.cpp b/tests/notnull_tests.cpp
index 010dd00..ce5a123 100644
--- a/tests/notnull_tests.cpp
+++ b/tests/notnull_tests.cpp
@@ -234,8 +234,8 @@ void ostream_helper(T v)
{
std::ostringstream os;
std::ostringstream ref;
- os << static_cast<void*>(p);
- ref << static_cast<void*>(&v);
+ os << p;
+ ref << &v;
CHECK(os.str() == ref.str());
}
{
diff --git a/tests/strided_span_tests.cpp b/tests/strided_span_tests.cpp
index f201df4..1563d90 100644
--- a/tests/strided_span_tests.cpp
+++ b/tests/strided_span_tests.cpp
@@ -17,14 +17,8 @@
#ifdef _MSC_VER
// blanket turn off warnings from CppCoreCheck from catch
// so people aren't annoyed by them when running the tool.
-#pragma warning(disable : 26440 26426) // from catch deprecated
-#pragma warning(disable : 4996) // strided_span is in the process of being deprecated.
- // Suppressing warnings until it is completely removed
-#endif
+#pragma warning(disable : 26440 26426) // from catch
-#if __clang__ || __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
#include <catch/catch.hpp> // for AssertionHandler, StringRef, CHECK, CHECK...
@@ -800,7 +794,3 @@ TEST_CASE("strided_span_conversion")
i++;
}
}
-
-#if __clang__ || __GNUC__
-#pragma GCC diagnostic pop
-#endif