Hi,
It is currently impossible to create a std::span from std::array<const T, X>:
std::array<const int, 4> a = {1, 2, 3, 4};
std::span<const int> s{a}; // No overload can be found.
std::span s{a}; // CTAD doesn't help either.
Whereas constructing a std::span from a C-array is perfectly valid:
const int a[] = {1, 2, 3, 4};
std::span<const int> s{a}; // It works
Is there any reason for the template<size_t N> constexpr span(const array<value_type, N>& arr) noexcept overload not to take by element_type as the overload for C-array does? Is there any other solution to that problem?
gls::span had a constructor for a generic const Container constructor that does not SFINAE if the Containter type is a std::array:
Is that something we want in the standard? In other words, could we relax the two constraints
(14.3) Container is not a specialization of
array, (14.4) is_array_v<Container> is
false, on the
template<class Container
> constexpr span
(const Container
& cont
) overload?
It possible to manually extract the a pointer and a size from a std::array and feed it to a std::span, but I really think that these two classes ought to work well together out of the box!
Sincerely,
Jean Guegant