This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [ PATCH ] C++20 <span>

On 30/08/19 15:22 -0400, JeanHeyd Meneide wrote:
This patch implements <span> as it currently exists in the C++20 Working Draft.


- __gnu_cxx::__normal_iterator is not fully constexpr, so its not used here

I'd prefer to make __normal_iterator constexpr, and use it.
It needs to be constexpr anyway for string and vector.

- P1394 might be slated to end up in C++20 per National Body Comments.
Therefore, an early implementation is left in an
implementation-defined _GLIBCXX_P1394 define.

2019-08-30  JeanHeyd "ThePhD" Meneide  <>

       * include/std/span: Implement the entirety of span.
       * include/bits/range_access.h: Add __adl_* versions of access functions.
       * testsuite/23_containers/span/ constexpr and
non-constexpr tests.
       * include/ Add span to install.
       * include/ Likewise

+++ b/libstdc++-v3/include/std/span
@@ -0,0 +1,549 @@
+// Components for manipulating non-owning sequences of objects -*- C++ -*-
+// Copyright (C) 2019-2019 Free Software Foundation, Inc.

Just 2019 please, not 2019-2019.

+// WARNING: they forgot this feature test macro
+// get on someone's back about it in Belfast!!!

Please use FIXME: instead of WARNING: (for consistency with the rest
of the sources, so people grepping for FIXME: can find this).

The new feature test macro should be in <version> too.

There's no need to qualify ::std::true_type and ::std::size_t when
within namespace std already. There's no ADL for type names, and
normal unqualified lookup will find the right ones (and is easier to

+      static_assert(
+        _Count == ::std::dynamic_extent || _Extent == ::std::dynamic_extent || _Count <= _Extent,
+        "bad span length");

There are a number of lines that are too long, they need to be broken
before 80 columns.

Our static_assert messages should be stated as the positive condition
that is being asserted. So the diagnostic reads like
"assertion failed: thing being asserted"

So "bad span length" makes it look like we asserted the length is bad,
but actually it was good. I prefer to write something saying "X must
be true", e.g. "count must be equal to dynamic_extent, or less than
the span's extent".

Do we need to check _Extent == ::std::dynamic_extent here, give nthat
if it's true then _Count <= _Extent will be true as well?

+  std::vector<std::int_least32_t> value{ 0 };

Your new testcase uses std::vector without including <vector>.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]