# std::basic_ispanstream<CharT,Traits>::span

From cppreference.com
< cpp‎ | io‎ | basic ispanstream

std::span <const CharT> span() const noexcept; | (1) | (since C++23)
void span( std::span <CharT> s ) noexcept; | (2) | (since C++23)
template< class SpanLike > void span( SpanLike&& r ) noexcept; | (3) | (since C++23)

1) Gets a `span` referencing the written area if std::ios_base::out is set in the open mode of the wrapped std::basic_spanbuf, or a `span` referencing the underlying buffer otherwise.
2) Makes the wrapped std::basic_spanbuf perform I/O on the buffer referenced by s.
3) Same as (2), except that s is obtained as if by
std::span <const CharT> cs{ std::forward <SpanLike>(r)};
std::span <CharT> s{const_cast<CharT*>(cs.data()), cs.size()};
. This overload participates in overload resolution only if `SpanLike` models `borrowed_range`, std::convertible_to <SpanLike, std::span <CharT>> is false, and std::convertible_to <SpanLike, std::span <const CharT>> is true.

### Parameters

s | - | std::span referencing the storage to be use as the new underlying buffer of stream
r | - | `borrowed_range` to be use as the new underlying buffer of stream

### Return value

1) A std::span referencing the underlying buffer or written area, depending on the open mode of the wrapped std::basic_spanbuf.
2,3) (none)

### Example

Run this code

    #include <cassert>
    #include <iostream>
    #include <span>
    #include <spanstream>

    int main()
    {
        char out_buf[16];
        std::ospanstream ost{std::span<char>{out_buf}};
        ost << "C++" << ' ' << 23 << '\0'; // note explicit null-termination
        auto sp = ost.span();
        assert(
            sp[0] == 'C' && sp[1] == '+' && sp[2] == '+' &&
            sp[3] == ' ' && sp[4] == '2' && sp[5] == '3' &&
            sp[6] == '\0'
        );
        std::cout << "sp.data(): [" << sp.data() << "]\n";
        std::cout << "out_buf: [" << out_buf << "]\n";
        // spanstream uses out_buf as internal storage, no allocations
        assert(static_cast<char*>(out_buf) == sp.data());

        const char in_buf[] = "X Y 42";
        std::ispanstream ist{std::span<const char>{in_buf}};
        assert(static_cast<const char*>(in_buf) == ist.span().data());
        char c;
        ist >> c;
        assert(c == 'X');
        ist >> c;
        assert(c == 'Y');
        int i;
        ist >> i;
        assert(i == 42);
        ist >> i; // buffer is exhausted
        assert(!ist);
    }

Output:

    sp.data(): [C++ 23]
    out_buf: [C++ 23]

### See also

span | obtains or initializes an underlying buffer according to mode (public member function of `std::basic_spanbuf<CharT,Traits>`)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/basic_ispanstream/span&oldid=130877"