[libcxx-commits] [libcxx] [libc++][span] P2447R4: `std::span` over an initializer list (PR #78157)
Mark de Wever via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Jan 15 09:29:04 PST 2024
================
@@ -13,22 +13,36 @@
// constexpr explicit(Extent != dynamic_extent) span(It first, size_type count);
// If Extent is not equal to dynamic_extent, then count shall be equal to Extent.
//
+// constexpr explicit(extent != dynamic_extent) span(std::initializer_list<value_type> il); // Since C++26
#include <span>
#include <cstddef>
+#include "test_macros.h"
+
template <class T, std::size_t extent>
std::span<T, extent> createImplicitSpan(T* ptr, std::size_t len) {
return {ptr, len}; // expected-error {{chosen constructor is explicit in copy-initialization}}
}
-void f() {
+void test() {
// explicit constructor necessary
int arr[] = {1, 2, 3};
createImplicitSpan<int, 1>(arr, 3);
- std::span<int> sp = {0, 0}; // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
- std::span<int, 2> sp2 = {0, 0}; // expected-error {{no matching constructor for initialization of 'std::span<int, 2>'}}
- std::span<const int> csp = {0, 0}; // expected-error {{no matching constructor for initialization of 'std::span<const int>'}}
- std::span<const int, 2> csp2 = {0, 0}; // expected-error {{no matching constructor for initialization of 'std::span<const int, 2>'}}
+ // expected-error at +1 {{no matching constructor for initialization of 'std::span<int>'}}
+ std::span<int> sp = {0, 0};
+ // expected-error at +1 {{no matching constructor for initialization of 'std::span<int, 2>'}}
+ std::span<int, 2> sp2 = {0, 0};
+#if TEST_STD_VER >= 26
+ // No error in C++26
+ std::span<const int> csp = {0, 0};
+ // expected-error at +1 {{chosen constructor is explicit in copy-initialization}}
----------------
mordante wrote:
We typically test explicitness without a verify test.
The main function in `test/std/input.output/file.streams/fstreams/ifstream.cons/path.pass.cpp`.
In general we prefer to test things without verify tests. These are only tested by us not by other standard libraries using our test suite. They are sensitive to changes in Clang diagnostics.
https://github.com/llvm/llvm-project/pull/78157
More information about the libcxx-commits
mailing list