Commit graph

528 commits

Author SHA1 Message Date
Carson Radtke
417ef685ea
Prevent external construction of checked iterators (#1263)
Some checks failed
Compiler Integration Tests / msvc (Debug, 14, -G "Visual Studio 18 2026" -T ClangCL, windows-2025, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 17, , windows-2022, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 17, , windows-2025, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 17, -G "Visual Studio 17 2022" -T ClangCL, windows-2022, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 17, -G "Visual Studio 18 2026" -T ClangCL, windows-2025, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 20, , windows-2022, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 20, , windows-2025, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 20, -G "Visual Studio 17 2022" -T ClangCL, windows-2022, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 20, -G "Visual Studio 18 2026" -T ClangCL, windows-2025, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 23, , windows-2022, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 23, , windows-2025, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 23, -G "Visual Studio 17 2022" -T ClangCL, windows-2022, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Debug, 23, -G "Visual Studio 18 2026" -T ClangCL, windows-2025, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 14, , windows-2022, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 14, , windows-2025, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 14, -G "Visual Studio 17 2022" -T ClangCL, windows-2022, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 14, -G "Visual Studio 18 2026" -T ClangCL, windows-2025, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 17, , windows-2022, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 17, , windows-2025, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 17, -G "Visual Studio 17 2022" -T ClangCL, windows-2022, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 17, -G "Visual Studio 18 2026" -T ClangCL, windows-2025, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 20, , windows-2022, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 20, , windows-2025, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 20, -G "Visual Studio 17 2022" -T ClangCL, windows-2022, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 20, -G "Visual Studio 18 2026" -T ClangCL, windows-2025, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 23, , windows-2022, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 23, , windows-2025, msvc) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 23, -G "Visual Studio 17 2022" -T ClangCL, windows-2022, ClangCL) (push) Has been cancelled
Compiler Integration Tests / msvc (Release, 23, -G "Visual Studio 18 2026" -T ClangCL, windows-2025, ClangCL) (push) Has been cancelled
Compiler Integration Tests / windows-sanitizer (push) Has been cancelled
* Prevent external construction of checked iterators

Keep iterator state constructors private to span and dyn_array so callers cannot fabricate bounds metadata.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* clang-format

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-25 14:57:48 -06:00
Carson Radtke
b4fa05c287
Ensure iterators convert to const iterators (#1264)
* Ensure iterators convert to const iterators

Add compile-time coverage for dyn_array and span iterator conversions, and implement the missing dyn_array conversion.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Format const iterator changes

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-25 11:29:38 -06:00
Carson Radtke
08687fb42a
Fix floating-to-integral narrow undefined behavior (#1266)
* Fix floating-to-integral narrow undefined behavior

* Format narrow conversion changes

* Suppress float-equal warning in narrow_cast
2026-08-25 11:29:25 -06:00
Carson Radtke
3cec6b0828
dyn_array: fix include tree (#1261)
simple gsl::dyn_array examples were failing to compile for the following
reasons:
 - gsl/gsl was not including dyn_array
 - dyn_array was not including <vector>

 This fixes both issues so trivial examples of using gsl::dyn_array
 work.
2026-08-19 17:27:28 -06:00
Carson Radtke
5230b7ea0e
ci: fix failing actions (#1255)
* ci: windows-2025 image -> use VS2026

For more info: https://github.com/actions/runner-images/issues/14017

* ci: macos -> use xcode 26.6

For more info: https://github.com/actions/runner-images/issues/13345

* fix -Wnrvo instance in dyn_array

* suppress build error in gtest w/ clangcl

* Drop Android and iOS support
2026-08-19 16:00:04 -06:00
Carson Radtke
a75212b9f3
feat: implementation of gsl::dyn_array (#1228)
* feat: implementation of gsl::dyn_array

Implement gsl::dyn_array<T, Allocator> as specified by the
CppCoreGuidlines here:
https://github.com/isocpp/CppCoreGuidelines/blob/master/docs/dyn_array.md

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-13 14:53:09 -06:00
Werner Henze
b2f6bec48e
clang-format improvements (#1251)
* clang-format improvements

- Add a clang-format linter check to the PR pipeline
- Apply clang-format to files where the linter initially failed
- Remove `CommentPragmas` from `.clang-format`
- Remove all `// clang-format off` and `// NO-FORMAT` as they are not needed
- Remove a commented out `GSL_SUPPRESS`

* clang-format 20

* pipeline fail

* Update .github/workflows/clang-format.yml

Co-authored-by: Carson Radtke <nosrac925@gmail.com>

* output used clang-format version

* installed version is 18 which replaces "GSL_SUPPRESS(bounds.1)" with "GSL_SUPPRESS(bounds .1)"

* only include/gsl, not include

to prevent formatting of include/CMakeLists.txt

* apply clang-format[-20]

In a VS2026 developer command prompt I ran `clang-format -i include\gsl\* --assume-filename x.cpp`. This was necessary because VS GUI does not format files without an extension :(. Please note that `--assume-filename` is necessary here, otherwise the files will not be formatted. Surprisingly the behaviour for the formatter differs from the behaviour of `lang-format(-20) --dry-run --Werror include/gsl/*` where clang-format recognizes that the files is C++.

* change "#if 0" back to original version with comments only

* formatting scripts for windows and linux

for linux with linter (shfmt and shellcheck)

* add WhitespaceSensitiveMacros: [GSL_SUPPRESS]

* provide path for clang-format (Windows)

Currently not clear to me:
On my personal computer at home, when I start "Developer Command Prompt for VS18", I can run `clang-format` without providing the path.
On my managed (domain) company computer, when I start "Developer Command Prompt for VS18", I can NOT run `clang-format` without providing the path. I need to call `"%VCINSTALLDIR%Tools\Llvm\bin\clang-format"`.
I have no idea what the difference is. At least the version `"%VCINSTALLDIR%Tools\Llvm\bin\clang-format"` works on both computers, so I add the path.

---------

Co-authored-by: Werner Henze <w.henze@avm.de>
Co-authored-by: Carson Radtke <nosrac925@gmail.com>
Co-authored-by: Werner Henze <werner.henze+gitcommits@posteo.de>
2026-06-05 06:45:10 -06:00
Werner Henze
f3c5967126
remove space in GSL_SUPPRESS (#1248)
As VS2026 wants a string literal in `[[gsl::suppress(...)]]` it is a difference, if you `GSL_SUPPRESS(a.1)` without space or `GSL_SUPPRESS(a .1)` with space. The version with the space does not work, so this commit removes the spaces.

Co-authored-by: Werner Henze <werner.henze+gitcommits@posteo.de>
2026-05-27 12:04:16 -06:00
Werner Henze
66ca39d9c8
narrow_cast instead of static_cast (#1250)
This removes the "warning C26472: Don't use a static_cast for arithmetic conversions. Use brace initialization, gsl::narrow_cast or gsl::narrow (type.1)." issued by VS2026.

Co-authored-by: Werner Henze <w.henze@avm.de>
2026-05-27 11:15:07 -06:00
maflcko
fcf3fe37c6
gsl::not_null: C.89: Make a hash noexcept (#1236)
Without this change, the guideline
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c89-make-a-hash-noexcept
would be violated.

The test fails before the changes here:

```
tests/pointers_tests.cpp:102:23: error: static assertion failed due to requirement 'noexcept(std::hash<gsl::not_null<std::shared_ptr<int>>>{}(std::declval()))': gsl::not_null hash operator must be noexcept
  102 |         static_assert(noexcept(std::hash<Key>{}(std::declval<Key>())),
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tests/pointers_tests.cpp:108:23: error: static assertion failed due to requirement 'noexcept(std::hash<gsl::strict_not_null<std::shared_ptr<int>>>{}(std::declval()))': gsl::strict_not_null hash operator must be noexcept
  108 |         static_assert(noexcept(std::hash<Key>{}(std::declval<Key>())),
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
2026-03-23 12:18:30 -06:00
maflcko
9f9f65c7e2
Mark gsl::not_null swap noexcept (#1235)
Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
2026-03-23 12:16:36 -06:00
maflcko
bf9d5e1aef
doc: Update URL in pointers to F.16 C++ Core Guidelines (#1232)
The anchor ID in the target is now lower-case.
2026-03-18 10:14:34 -06:00
Copilot
1883887359
Fix std::hash compilation error for gsl::not_null<std::shared_ptr<T>> (#1210)
* Initial plan for issue

* Fix hash compilation issue for gsl::not_null with shared_ptr

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Add comment explaining safe usage of typename T::element_type in not_null_hash

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Initial plan for issue

* Remove upgrade_checklist.md file as requested

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* restore docs/upgrade_checklist.md

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>
Co-authored-by: Carson Radtke <carsonradtke@microsoft.com>
2025-12-05 10:00:06 -07:00
Werner Henze
4fb59125d1
Revert unintended change to GSL_SUPPRESS (#1226)
PR #1213 changed this line. According to https://github.com/microsoft/GSL/pull/1213/files#r2586073058 the change was unintended. This PR reverts the change to the previous implementation.

Co-authored-by: Werner Henze <w.henze@avm.de>
2025-12-04 12:44:26 -07:00
Carson Radtke
543d0dd3fe
export proper syntax for GSL_SUPPRESS for new VS (#1213)
A new Visual Studio version will soon be available that deprecates the
old syntax for gsl::suppress. Customers will now get a C4875 diagnostic
on suppressions that look like `gsl::suppress(x)` urging them to use
`gsl::suppress("x")` instead.

This change updates the `GSL_SUPPRESS` macro to preprocess
GSL_SUPPRESS(x) to gsl::suppress("x") on clang and new versions of MSVC.
2025-10-02 08:47:16 -06:00
Copilot
7e0943d20d
Add constexpr to not_null comparison operators (#1208)
* Initial plan for issue

* Add test and plan to make not_null comparison functions constexpr

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Add constexpr to not_null comparison operators

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Fix copyright year in constexpr_notnull_tests.cpp

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Fix constexpr tests for better compiler compatibility

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Remove build artifacts and update .gitignore

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Fix constexpr tests to be compatible with more compilers

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* copilot: Provide more project context for the Copilot coding agent (#1207)

* copilot: create .github/copilot-instructions.md

This file provides additional context and instructions to GitHub
Copilot so it can better understand the codebase and coding conventions.

More can be found about this file at the following links:
 - [Best practices for using Copilot to work on tasks](https://docs.github.com/en/enterprise-cloud@latest/copilot/using-github-copilot/using-copilot-coding-agent-to-work-on-tasks/best-practices-for-using-copilot-to-work-on-taskshttps://docs.github.com/en/enterprise-cloud@latest/copilot/using-github-copilot/using-copilot-coding-agent-to-work-on-tasks/best-practices-for-using-copilot-to-work-on-tasks)
 - [Adding repository custom instructions for GitHub Copilot](https://docs.github.com/en/enterprise-cloud@latest/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot?tool=webuihttps://docs.github.com/en/enterprise-cloud@latest/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot)

* copilot: add copilot-setup-steps.yml

This new workflow is done when copilot loads into an environment and
enables copilot to be sure it has the proper dependencies before working
on changes. Also included in the change are explicit instructions on
what to do before reporting back "done".

* Initial plan for issue

* Rebase onto main and verify changes meet project guidelines

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Update .gitignore to exclude build-cxx* directories

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Fix newline at end of constexpr_notnull_tests.cpp and update .gitignore

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

* Remove C++14 feature check that is redundant since C++14 is the minimum supported standard

Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com>
Co-authored-by: Carson Radtke <carsonradtke@microsoft.com>
2025-05-22 11:52:47 -06:00
ozaktash
466e4ebaa5
Update return by value threshold in gsl::not_null (#1205)
- Allow returning by value for types that are not greater than two pointers in size
2025-05-12 11:02:03 -06:00
Werner Henze
2828399820
replace BYTE_TYPE with a solution based on namespaces (#1201)
- A macro with the very generic name `BYTE_TYPE` is likely to collide with existing code, so get rid of the macro.
- The new solution is to provide a non-deprecated `byte` in the namespace `gsl::impl`.
  - Users of GSL should use `gsl::byte`, which is still deprecated when mapped to a `std::std::byte`.
  - GSL types and functions need to use `gsl::impl::byte` so they do not trigger the deprecation warning.
- The `gsl::impl::byte` return type in an exported function is not nice, it might mislead users to use that type in their own declarations. But the `BYTE_TYPE` solution is not better in this respect.

Co-authored-by: Werner Henze <w.henze@avm.de>
2025-02-28 08:53:25 -06:00
Carson Radtke
7fabaa499d
deprecate features adopted into C++ (#1198)
* deprecated features adopted into C++

1) Mark the following GSL features as deprecated:
 - gsl::unique_ptr (always)
 - gsl::shared_ptr (always)
 - gsl::byte (since c++17)
 - gsl::joining_thread (never implemented)
2) Refactor existing deprecations to use the new GSL_DEPRECATED(msg) macro.
3) Create a section in the README for deprecated features in the
   standard.

* do not deprecate gsl::to_integer because we never claim to implement it.

* do not use gsl::byte if it is deprecated
2025-02-14 11:24:51 -06:00
Carson Radtke
4742bc192a
use relative path in # include (#1194)
Reverts commit that changes #include "assert" -> #include "gsl/assert".
This change is necessary in order to comply with CppCoreGuideline's
SF.12. Now we do #include "./assert".
2025-02-12 09:16:45 -06:00
Carson Radtke
ec729d63a7
introduce gsl::not_null<T>::element_type (#1196)
* introduce gsl::not_null<T>::element_type

* use std::is_same instead of is_same_v

* fix: cannot put a non-pointer in a gsl::not_null
2025-02-12 09:16:05 -06:00
Tiago
355982daf6
Delete gsl/string_span (#1185)
This has been deprecated for 2+ years.
2025-01-07 08:58:59 -06:00
Tiago
7b6b8013b1
Add "gsl" to #includes (#1184)
Office is seeing build breaks due to `#include "span"` including
C++20 span instead of gsl/span. Most likely we want all headers
includes qualified with "gsl/" to avoid similar issues.
2025-01-07 08:42:38 -06:00
Werner Henze
1cdb8d295e
More checks for non-compilable code, plus fix for span (#1180) 2025-01-04 11:50:31 -06:00
Werner Henze
16a60199df
strict_not_null for unique_ptr (#1179)
- `strict_not_null<std::unique_ptr<int>>{ std::make_unique<int>()}` failed to compile
  - `strict_not_null` ctor needs to move the passed `unique_ptr`, not copy
  - Copied `not_null` `TestNotNullConstructors` for `strict_not_null`
- The `noexcept` specifiers on the `strict_not_null` and `not_null` constructors were out of sync.
- Added unit test for `not_null<unique_ptr<T>>` and for `strict_not_null<unique_ptr<T>>`
- Added unit test for `gsl::swap` for two `strict_not_null`
- Added unit test for `gsl::swap` for `not_null` and `strict_not_null`

Co-authored-by: Werner Henze <w.henze@avm.de>
2024-12-26 11:00:36 -06:00
Werner Henze
fcd55ee924
Better use of std::enable_if (#1177)
* this commits adds tests that should fail, but don't

* Better use of std::enable_if

Replace the occurances of `class = std::enable_if_t<Cond>` and `typename = std::enable_if_t<Cond>` that have been identified in the previous commit with `std::enable_if_t<Cond, bool> = true`.

This commit is inspired by #1174, which changed one occurance in the owner header. This commit is aimed to fix all remaining occurances.

* fix failing checks

- core.cxx_gsl aktualisiert auf [](https://gitlab.avm.de/fos/repos/core.cxx_gsl/-/commit/)
- plc.access_lib aktualisiert auf [](https://gitlab.avm.de/fos/repos/plc.access_lib/-/commit/)
- plc.common aktualisiert auf [](https://gitlab.avm.de/fos/repos/plc.common/-/commit/)
- plc.daemon aktualisiert auf [](https://gitlab.avm.de/fos/repos/plc.daemon/-/commit/)
-

Test Plan:
-

---------

Co-authored-by: Werner Henze <werner.henze+gitcommits@posteo.de>
Co-authored-by: Werner Henze <w.henze@avm.de>
2024-12-23 10:40:22 -06:00
Carson Radtke
272463043e
introduce gsl::swap for swapping gsl::not_null (#1160)
fixes: https://github.com/microsoft/GSL/issues/1129

* create gsl::swap<T>(T&, T&) which wraps std::swap
* specialize gsl::swap<T>(gsl::not_null<T>&, gsl::not_null<T>&)
* add tests
2024-12-13 15:16:53 -06:00
Carson Radtke
8a0e3d8a9b
fix: direct-init const ref instead of list-init (#1175)
fixes: https://github.com/microsoft/GSL/issues/1162

gcc has a bug that generates a call to the copy constructor when list
initializing a const reference. This PR offers a workaround which is to
direct initialize the value.

see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117900
2024-12-13 10:22:16 -06:00
Alberto La Rocca
aed09c41b6
Fix SFINAE on gsl::owner. (#1174)
`std::enable_if_t` must not be used as a default template argument, otherwise the instantiator will be able to override it freely with something that doesn't fail substitution. Instead, `std::enable_if_t` itself must be the type of the template argument.

More information in the examples here: https://en.cppreference.com/w/cpp/types/enable_if
2024-12-13 09:56:28 -06:00
Carson Radtke
f8ec309118
improve performance of span_iterator w/ clang (#1166)
* improve performance of span_iterator w/ clang

Issue: #1165

Before this PR, the range-for loop was ~3300x slower. After this PR, it
is ~1.005x slower

The clang optimizer is very good at optimizing `current != end`, so
we changed to this idiom. This moves the Expects assertion into the
constructor instead of on the hot-path which is called whenever either
operator++ or operator* is called.

Note: The codegen for the assertion is still a missed optimization,
but less worrisome as it only happens once per iterator.

Note: benchmarks on M1 Macbook Pro w/ Apple Clang 16.0.0
2024-11-12 15:41:21 -06:00
Heiko Kröger
82ba6c77ce
Added the IWYU pragma export (#1154)
* Added the IWYU pragma export

clang-tidy has added the check misc-include-cleaner with version 17. This check respects the IWYU pragmas.
2024-10-15 17:26:45 -05:00
mq白
32511b8de4
Delete the useless 'noexcept(false)' (#1152) 2024-10-14 15:30:40 -05:00
Konstantin Akimov
84b2ca1352
Remove unused headers from gsl/pointers (#1153)
* Remove unused headers from gsl/pointers

forward is already declared in utility, no need to include algorithm which is relativaly heavy
hash is already declared in memory, no need to bring brand-new header system_error for hash only

* Fix: add missing header <functional> to gsl/pointers due to using less/greater
2024-10-14 15:15:46 -05:00
Werner Henze
3275f9ccb9
Fix gcc build problem (#1149)
Closes issue #1148 by fixing problems introduced in PR #1140.

Co-authored-by: Werner Henze <w.henze@avm.de>
2024-10-11 19:46:21 -05:00
Stephan T. Lavavej
2e0d1ba48c
Test only __cpp_lib_byte, drop _HAS_STD_BYTE. (#1145) 2024-02-26 13:22:20 -08:00
d-winsor
1b4d42ca2e
Fix initialization in test (#1140)
* Suppress unsafe-buffer-usage
2024-02-26 13:17:12 -08:00
Bruce Mitchener
77b2f4f3b8
Fix some typos. (#1143) 2024-01-17 15:25:07 -08:00
Nicholas Guriev
e64c97fc2c
Mark not_null constructors as noexcept when underlying type can be moved with no exception (#1135)
This enables possible optimisations for trivial types. This also avoids a bug
in std::variant::emplace from GNU's libstdc++.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106547
2023-10-18 15:15:26 -07:00
Edward Chen
52212c2d76
Update Clang GSL_SUPPRESS to stringize parameter instead of using fixed string literal. (#1133)
Fix #1130.
2023-09-11 10:52:30 -07:00
Dmitry Kobets
2940006b5c
Suppress some noisy / buggy warnings (#1136)
Two warnings were being emitted in the MSVC+LLVM tests. 

The warning `-Wunsafe-buffer-usage` is initially introduced in some capacity here https://reviews.llvm.org/D137346 pointing to documentation at https://discourse.llvm.org/t/rfc-c-buffer-hardening/65734. The warning is a stylistic checker whose goal is to "emit a warning every time an unsafe operation is performed on a raw pointer". This type of programming model is not useful for library implementations of types such as `span`, where direct manipulation of raw pointers is inevitable, so disable the warning altogether.

There is also a false-positive warning https://github.com/llvm/llvm-project/issues/65689 that I've disabled inline.
2023-09-11 10:06:40 -07:00
Dmitry Kobets
4300304ef2
Remove unused macros (#1128)
This macro is a relic of the old implementation of GSL's header. It is unused and can be removed.
2023-07-26 15:07:28 -07:00
Werner Henze
b34f7350fe
get back gcc 8.4 compatibility (#1127)
Before my PR #1122 `gsl/pointers` was gcc 8.4 compatible. Now it is not. This commit makes it compatible with gcc 8.4 again.
2023-07-06 12:51:48 -07:00
Werner Henze
167c77d28e
add missing include (#1126)
The header file uses `std::declval`, so it needs to `#include <utility>`.
2023-07-03 17:20:50 -07:00
Werner Henze
87e21400dc
remove gcc noexcept warning (#1122)
Without this change a `gsl::not_null<class_type>` triggers these `noexcept` warnings:
```
.../gsl/include/gsl/pointers:162:50: warning: noexcept-expression evaluates to ‘false’ because of a call to ‘constexpr gsl::details::value_or_reference_return_t<T> gsl::not_null<T>::get() const [with T = class_type*; gsl::details::value_or_reference_return_t<T> = class_type* const]’ [-Wnoexcept]
  162 |                 const not_null<U>& rhs) noexcept(noexcept(lhs.get() == rhs.get()))
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.../gsl/include/gsl/pointers:119:55: note: but ‘constexpr gsl::details::value_or_reference_return_t<T> gsl::not_null<T>::get() const [with T = class_type*; gsl::details::value_or_reference_return_t<T> = class_type* const]’ does not throw; perhaps it should be declared ‘noexcept’
  119 |     constexpr details::value_or_reference_return_t<T> get() const
      |                                                       ^~~
```

Co-authored-by: Werner Henze <w.henze@avm.de>
2023-06-28 15:17:12 -07:00
Dmitry Kobets
3549e31ba4
Deprecate <gsl/string_span> and replace with <gsl/zstring> (#1125)
With `string_span` having been deprecated (https://github.com/microsoft/GSL/pull/931, https://github.com/microsoft/GSL/pull/945) and removed (https://github.com/microsoft/GSL/pull/1074), the header `<gsl/string_span>` now only contains the definitions for the `zstring` family. Update the name accordingly from `<gsl/string_span>` to `<gsl/zstring>`. The old header is now deprecated and should no longer be used and will be removed in some future release.
2023-06-28 10:48:23 -07:00
Dmitry Kobets
65a5995035
Remove deprecated headers (#1124)
Headers that were previously prefixed with `gsl_` were renamed to drop the `gsl_` prefix in https://github.com/microsoft/GSL/pull/946, and the original version deprecated.
The deprecation happened a long time ago, so it is now time to remove these headers entirely.
2023-06-28 10:48:04 -07:00
Dmitry Kobets
303d964a24
Deprecate the Ptr make_span overloads (#1113)
These overloads don't seem to be in a usable state, and their original purpose is no longer clear. Deprecate them.
Resolves #1092
2023-05-22 10:48:41 -07:00
Dmitry Kobets
4b5b5a1ed5
Disable std::hash<gsl::not_null<T>> if std::hash<T> is not enabled. (#1109)
Resolves #914
2023-05-10 11:25:04 -07:00
Dmitry Kobets
5dc7fae119
Use the implementation-defined strict total order for pointer comparisons with not_null (#1106)
Using `<`,`<=`,`>`,`>=` to compare unrelated pointers gives an unspecified result according to the standard.
This PR replaces the usage of these operators in `gsl::not_null` with the STL counterparts, which would leverage any implementation-defined strict total ordering for pointers.

Resolves #880
2023-05-09 09:06:53 -07:00
Dmitry Kobets
9face82309
Remove unnecessary check from size_bytes() (#1105)
`size_bytes()` returns the span's size in bytes. 
Assuming the span was constructed with an accurate size parameter, the check `size() < dynamic_extent / sizeof(element_type)` isn't required, since `size_t(-1)` (which is `dynamic_extent`) represents the size of the address space, so the number of bytes will never exceed it and in practice won't even come close.
Otherwise, it is not actually feasible to detect cases when the size parameter does not correspond to the dimensions of the underlying data pointer. In these cases, the relationship `size() < dynamic_extent / sizeof(element_type)` is simply one of many ways in which the `size()` could be incorrect, and serves no necessary purpose.

Resolves #1012
2023-05-09 09:05:26 -07:00