// -*- C++ -*- //===------------------------------ span ---------------------------------===// // // 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++98, c++03, c++11, c++14, c++17 // // template // span // as_bytes(span s) noexcept; #include #include #include #include "test_macros.h" template void testRuntimeSpan(Span sp) { ASSERT_NOEXCEPT(std::as_bytes(sp)); auto spBytes = std::as_bytes(sp); using SB = decltype(spBytes); ASSERT_SAME_TYPE(const std::byte, typename SB::element_type); if constexpr (sp.extent == std::dynamic_extent) assert(spBytes.extent == std::dynamic_extent); else assert(spBytes.extent == sizeof(typename Span::element_type) * sp.extent); assert((void *) spBytes.data() == (void *) sp.data()); assert(spBytes.size() == sp.size_bytes()); } struct A{}; int iArr2[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int main(int, char**) { 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::size_t) 0)); testRuntimeSpan(std::span(&s, 1)); return 0; }