// -*- C++ -*- //===------------------------------ span ---------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===---------------------------------------------------------------------===// // UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 // // template // span(sizeof(ElementType)) * Extent> // as_writeable_bytes(span s) noexcept; #include #include #include #include "test_macros.h" template void testRuntimeSpan(Span sp) { ASSERT_NOEXCEPT(std::as_writeable_bytes(sp)); auto spBytes = std::as_writeable_bytes(sp); using SB = decltype(spBytes); ASSERT_SAME_TYPE(std::byte, typename SB::element_type); if (sp.extent == std::dynamic_extent) assert(spBytes.extent == std::dynamic_extent); else assert(spBytes.extent == static_cast(sizeof(typename Span::element_type)) * sp.extent); assert(static_cast(spBytes.data()) == static_cast(sp.data())); assert(spBytes.size() == sp.size_bytes()); } struct A{}; int iArr2[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int main () { testRuntimeSpan(std::span ()); testRuntimeSpan(std::span ()); testRuntimeSpan(std::span ()); testRuntimeSpan(std::span ()); testRuntimeSpan(std::span()); testRuntimeSpan(std::span ()); testRuntimeSpan(std::span ()); testRuntimeSpan(std::span ()); testRuntimeSpan(std::span ()); testRuntimeSpan(std::span()); testRuntimeSpan(std::span(iArr2, 1)); testRuntimeSpan(std::span(iArr2, 2)); testRuntimeSpan(std::span(iArr2, 3)); testRuntimeSpan(std::span(iArr2, 4)); testRuntimeSpan(std::span(iArr2, 5)); testRuntimeSpan(std::span(iArr2 + 5, 1)); testRuntimeSpan(std::span(iArr2 + 4, 2)); testRuntimeSpan(std::span(iArr2 + 3, 3)); testRuntimeSpan(std::span(iArr2 + 2, 4)); testRuntimeSpan(std::span(iArr2 + 1, 5)); std::string s; testRuntimeSpan(std::span(&s, (std::ptrdiff_t) 0)); testRuntimeSpan(std::span(&s, 1)); }