[libcxx-commits] [libcxx] [libc++][span] P2447R4: `std::span` over an initializer list (PR #78157)
Hristo Hristov via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Jan 15 12:48:52 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}}
----------------
H-G-Hristov wrote:
Thanks! I'll update the tests.
https://github.com/llvm/llvm-project/pull/78157
More information about the libcxx-commits
mailing list