30 Input/output library [input.output]

30.5 Iostreams base classes [iostreams.base]

30.5.4 Class template fpos [fpos] fpos requirements [fpos.operations]

Operations specified in Table 112 are permitted. In that table,

Table 112 — Position type requirements
ExpressionReturn typeOperationalAssertion/note
P(i) p == P(i)
note: a destructor is assumed.
P p(i);
P p = i;
Postconditions: p == P(i).
P(o) fpos converts from offset
O(p) streamoff converts to offset P(O(p)) == p
p == q convertible to bool == is an equivalence relation
p != q convertible to bool !(p == q)
q = p + o
p += o
fpos + offset q - o == p
q = p - o
p -= o
fpos - offset q + o == p
o = p - q streamoff distance q + o == p
streamsize(O(sz)) == sz
streamsize(O(sz)) == sz

[Note: Every implementation is required to supply overloaded operators on fpos objects to satisfy the requirements of [fpos.operations]. It is unspecified whether these operators are members of fpos, global operators, or provided in some other way. end note]

Stream operations that return a value of type traits​::​pos_­type return P(O(-1)) as an invalid value to signal an error. If this value is used as an argument to any istream, ostream, or streambuf member that accepts a value of type traits​::​pos_­type then the behavior of that function is undefined.