Skip to content

api: span and string_view get extra contract asserts per std#5224

Open
lgritz wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
lgritz:lg-safety
Open

api: span and string_view get extra contract asserts per std#5224
lgritz wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
lgritz:lg-safety

Conversation

@lgritz
Copy link
Copy Markdown
Collaborator

@lgritz lgritz commented Jun 2, 2026

According to C++26, some newly required std container hardening for std::span and std::string_view were not reflected in our own analogous types. In particular, some more precondition checking was required for span::subspan, first, last, and string_view::remove_prefix and remove_suffix in order to match the expectations of true parity with with the std versions.

This is important because some day, we will probably discard our own string_view and span for the std ones (especially when we are using compilers in which they are fully hardened).

I found a couple spots where we used remove_prefix and remove_suffix that assumed the range would be clamped, as it is in our version, rather than contractually require them to be valid ranges as in std. This would eventually fail if replaced by std::string_view, so fixing now.

According to C++26, some newly required std container hardening for
std::span and std::string_view were not reflected in our own analogous
types. In particular, some more precondition checking was required for
span::subspan, first, last, and string_view::remove_prefix and
remove_suffix in order to match the expectations of true parity with
with the std versions.

This is important because some day, we will probably discard our own
string_view and span for the std ones (especially when we are using
compilers in which they are fully hardened).

I found a couple spots where we used remove_prefix and remove_suffix
that assumed the range would be clamped, as it is in our version,
rather than contractually require them to be valid ranges as in std.
This would eventually fail if replaced by std::string_view, so
fixing now.

Signed-off-by: Larry Gritz <lg@larrygritz.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant