[spanbuf.cons] # 31 Input/output library [[input.output]](./#input.output) ## 31.9 Span-based streams [[span.streams]](span.streams#spanbuf.cons) ### 31.9.3 Class template basic_spanbuf [[spanbuf]](spanbuf#cons) #### 31.9.3.2 Constructors [spanbuf.cons] [🔗](#lib:basic_spanbuf,constructor) `explicit basic_spanbuf(std::span s, ios_base::openmode which = ios_base::in | ios_base::out); ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L10147) *Effects*: Initializes the base class with basic_streambuf() ([[streambuf.cons]](streambuf.cons "31.6.3.2 Constructors")), and *mode* with which[.](#1.sentence-1) Initializes the internal pointers as if calling span(s)[.](#1.sentence-2) [🔗](#lib:basic_spanbuf,constructor_) `basic_spanbuf(basic_spanbuf&& rhs); ` [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L10160) *Effects*: Initializes the base class with std​::​move(rhs) and*mode* with std​::​move(rhs.*mode*) and*buf* with std​::​move(rhs.*buf*)[.](#2.sentence-1) The sequence pointers in *this (eback(), gptr(), egptr(),pbase(), pptr(), epptr()) obtain the values which rhs had[.](#2.sentence-2) It isimplementation-defined whether rhs.*buf*.​empty() returns true after the move[.](#2.sentence-3) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L10173) *Postconditions*: Let rhs_p refer to the state of rhs just prior to this construction[.](#3.sentence-1) - [(3.1)](#3.1) span().data() == rhs_p.span().data() - [(3.2)](#3.2) span().size() == rhs_p.span().size() - [(3.3)](#3.3) eback() == rhs_p.eback() - [(3.4)](#3.4) gptr() == rhs_p.gptr() - [(3.5)](#3.5) egptr() == rhs_p.egptr() - [(3.6)](#3.6) pbase() == rhs_p.pbase() - [(3.7)](#3.7) pptr() == rhs_p.pptr() - [(3.8)](#3.8) epptr() == rhs_p.epptr() - [(3.9)](#3.9) getloc() == rhs_p.getloc()