[libc++][docs] Mark LWG3274 as complete

Mark LWG3274 as complete. The feature test macro `__cpp_lib_span` was added in
`6d2599e4f776d0cd88438cb82a00c4fc25cc3f67`.

https://wg21.link/p1024 mentions marking `span:::empty()` with
`[[nodiscard]]` which is not done yet. So, do that and add tests.

Reviewed By: ldionne, Quuxplusone, Mordante, #libc

Differential Revision: https://reviews.llvm.org/D111516
This commit is contained in:
Joe Loser 2021-10-12 22:30:58 -04:00
parent 39093279f2
commit 8e92410ecc
No known key found for this signature in database
GPG Key ID: 1CDBEBC050EA230D
4 changed files with 33 additions and 9 deletions

View File

@ -183,7 +183,7 @@
"`3272 <https://wg21.link/LWG3272>`__","``%I%p``\ should parse/format ``duration``\ since midnight","Belfast","",""
"`3259 <https://wg21.link/LWG3259>`__","The definition of *constexpr iterators* should be adjusted","Belfast","",""
"`3103 <https://wg21.link/LWG3103>`__","Errors in taking subview of ``span``\ should be ill-formed where possible","Belfast","",""
"`3274 <https://wg21.link/LWG3274>`__","Missing feature test macro for ``<span>``\ ","Belfast","",""
"`3274 <https://wg21.link/LWG3274>`__","Missing feature test macro for ``<span>``\ ","Belfast","|Complete|","11.0"
"`3276 <https://wg21.link/LWG3276>`__","Class ``split_view::outer_iterator::value_type``\ should inherit from ``view_interface``\ ","Belfast","",""
"`3277 <https://wg21.link/LWG3277>`__","Pre-increment on prvalues is not a requirement of ``weakly_incrementable``\ ","Belfast","",""
"`3149 <https://wg21.link/LWG3149>`__","``DefaultConstructible``\ should require default initialization","Belfast","|Complete|","13.0"

1 Issue # Issue Name Meeting Status First released version
183 `3272 <https://wg21.link/LWG3272>`__ ``%I%p``\ should parse/format ``duration``\ since midnight Belfast
184 `3259 <https://wg21.link/LWG3259>`__ The definition of *constexpr iterators* should be adjusted Belfast
185 `3103 <https://wg21.link/LWG3103>`__ Errors in taking subview of ``span``\ should be ill-formed where possible Belfast
186 `3274 <https://wg21.link/LWG3274>`__ Missing feature test macro for ``<span>``\ Belfast |Complete| 11.0
187 `3276 <https://wg21.link/LWG3276>`__ Class ``split_view::outer_iterator::value_type``\ should inherit from ``view_interface``\ Belfast
188 `3277 <https://wg21.link/LWG3277>`__ Pre-increment on prvalues is not a requirement of ``weakly_incrementable``\ Belfast
189 `3149 <https://wg21.link/LWG3149>`__ ``DefaultConstructible``\ should require default initialization Belfast |Complete| 13.0

View File

@ -89,7 +89,7 @@ public:
// [span.obs], span observers
constexpr size_type size() const noexcept;
constexpr size_type size_bytes() const noexcept;
constexpr bool empty() const noexcept;
[[nodiscard]] constexpr bool empty() const noexcept;
// [span.elem], span element access
constexpr reference operator[](size_type idx) const;
@ -330,9 +330,9 @@ public:
return {data() + __offset, __count};
}
_LIBCPP_INLINE_VISIBILITY constexpr size_type size() const noexcept { return _Extent; }
_LIBCPP_INLINE_VISIBILITY constexpr size_type size_bytes() const noexcept { return _Extent * sizeof(element_type); }
_LIBCPP_INLINE_VISIBILITY constexpr bool empty() const noexcept { return _Extent == 0; }
_LIBCPP_INLINE_VISIBILITY constexpr size_type size() const noexcept { return _Extent; }
_LIBCPP_INLINE_VISIBILITY constexpr size_type size_bytes() const noexcept { return _Extent * sizeof(element_type); }
[[nodiscard]] _LIBCPP_INLINE_VISIBILITY constexpr bool empty() const noexcept { return _Extent == 0; }
_LIBCPP_INLINE_VISIBILITY constexpr reference operator[](size_type __idx) const noexcept
{
@ -501,9 +501,9 @@ public:
return {data() + __offset, __count};
}
_LIBCPP_INLINE_VISIBILITY constexpr size_type size() const noexcept { return __size; }
_LIBCPP_INLINE_VISIBILITY constexpr size_type size_bytes() const noexcept { return __size * sizeof(element_type); }
_LIBCPP_INLINE_VISIBILITY constexpr bool empty() const noexcept { return __size == 0; }
_LIBCPP_INLINE_VISIBILITY constexpr size_type size() const noexcept { return __size; }
_LIBCPP_INLINE_VISIBILITY constexpr size_type size_bytes() const noexcept { return __size * sizeof(element_type); }
[[nodiscard]] _LIBCPP_INLINE_VISIBILITY constexpr bool empty() const noexcept { return __size == 0; }
_LIBCPP_INLINE_VISIBILITY constexpr reference operator[](size_type __idx) const noexcept
{

View File

@ -0,0 +1,24 @@
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <span>
// [[nodiscard]] constexpr bool empty() const noexcept;
#include <span>
void test() {
std::span<int> s1;
s1.empty(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
int arr[] = {1, 2, 3};
std::span<int, 3> s2{arr};
s2.empty(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
}

View File

@ -13,7 +13,7 @@
// <span>
// constexpr bool empty() const noexcept;
// [[nodiscard]] constexpr bool empty() const noexcept;
//