[istream.general]

# 31 Input/output library [[input.output]](./#input.output)

## 31.7 Formatting and manipulators [[iostream.format]](iostream.format#istream.general)

### 31.7.5 Input streams [[input.streams]](input.streams#istream.general)

#### 31.7.5.2 Class template basic_istream [[istream]](istream#general)

#### 31.7.5.2.1 General [istream.general]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L4296)

When a function is specified
with a type placeholder of *extended-floating-point-type*,
the implementation provides overloads
for all cv-unqualified extended floating-point types ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"))
in lieu of *extended-floating-​point-type*[.](#1.sentence-1)

[ð](#lib:basic_istream)

namespace std {template<class charT, class traits = char_traits<charT>>class basic_istream : virtual public basic_ios<charT, traits> {public:// types (inherited from [basic_ios](ios "31.5.4 Class template basic_­ios [ios]"))using char_type = charT; using int_type = typename traits::int_type; using pos_type = typename traits::pos_type; using off_type = typename traits::off_type; using traits_type = traits; // [[istream.cons]](istream.cons "31.7.5.2.2 Constructors"), constructor/destructorexplicit basic_istream(basic_streambuf<charT, traits>* sb); virtual ~basic_istream(); // [[istream.sentry]](istream.sentry "31.7.5.2.4 Class basic_­istream​::​sentry"), prefix/suffixclass sentry; // [[istream.formatted]](istream.formatted "31.7.5.3 Formatted input functions"), formatted input basic_istream& operator>>(basic_istream& (*pf)(basic_istream&));
 basic_istream& operator>>(basic_ios<charT, traits>& (*pf)(basic_ios<charT, traits>&));
 basic_istream& operator>>(ios_base& (*pf)(ios_base&));

 basic_istream& operator>>(bool& n);
 basic_istream& operator>>(short& n);
 basic_istream& operator>>(unsigned short& n);
 basic_istream& operator>>(int& n);
 basic_istream& operator>>(unsigned int& n);
 basic_istream& operator>>(long& n);
 basic_istream& operator>>(unsigned long& n);
 basic_istream& operator>>(long long& n);
 basic_istream& operator>>(unsigned long long& n);
 basic_istream& operator>>(float& f);
 basic_istream& operator>>(double& f);
 basic_istream& operator>>(long double& f);
 basic_istream& operator>>(*extended-floating-point-type*& f);

 basic_istream& operator>>(void*& p);
 basic_istream& operator>>(basic_streambuf<char_type, traits>* sb); // [[istream.unformatted]](istream.unformatted "31.7.5.4 Unformatted input functions"), unformatted input streamsize gcount() const;
 int_type get();
 basic_istream& get(char_type& c);
 basic_istream& get(char_type* s, streamsize n);
 basic_istream& get(char_type* s, streamsize n, char_type delim);
 basic_istream& get(basic_streambuf<char_type, traits>& sb);
 basic_istream& get(basic_streambuf<char_type, traits>& sb, char_type delim);

 basic_istream& getline(char_type* s, streamsize n);
 basic_istream& getline(char_type* s, streamsize n, char_type delim);

 basic_istream& ignore(streamsize n = 1, int_type delim = traits::eof());
 basic_istream& ignore(streamsize n, char_type delim);
 int_type peek();
 basic_istream& read (char_type* s, streamsize n);
 streamsize readsome(char_type* s, streamsize n);

 basic_istream& putback(char_type c);
 basic_istream& unget(); int sync();

 pos_type tellg();
 basic_istream& seekg(pos_type);
 basic_istream& seekg(off_type, ios_base::seekdir); protected:// [[istream.cons]](istream.cons "31.7.5.2.2 Constructors"), copy/move constructor basic_istream(const basic_istream&) = delete;
 basic_istream(basic_istream&& rhs); // [[istream.assign]](istream.assign "31.7.5.2.3 Assignment and swap"), assignment and swap basic_istream& operator=(const basic_istream&) = delete;
 basic_istream& operator=(basic_istream&& rhs); void swap(basic_istream& rhs); }; // [[istream.extractors]](istream.extractors "31.7.5.3.3 basic_­istream​::​operator>>"), character extraction templatestemplate<class charT, class traits> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT&); template<class traits> basic_istream<char, traits>& operator>>(basic_istream<char, traits>&, unsigned char&); template<class traits> basic_istream<char, traits>& operator>>(basic_istream<char, traits>&, signed char&); template<class charT, class traits, size_t N> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT(&)[N]); template<class traits, size_t N> basic_istream<char, traits>& operator>>(basic_istream<char, traits>&, unsigned char(&)[N]); template<class traits, size_t N> basic_istream<char, traits>& operator>>(basic_istream<char, traits>&, signed char(&)[N]);}

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L4399)

The class templatebasic_istream defines a number of member function
signatures that assist in reading and interpreting input from sequences
controlled by a stream buffer[.](#2.sentence-1)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L4406)

Two groups of member function signatures share common properties:
the[*formatted input functions*](#def:formatted_input_functions) (or[*extractors*](#def:extractors))
and the[*unformatted input functions.*](#def:unformatted_input_functions.) Both groups of input functions are described as if they obtain (or[*extract*](#def:extract))
input[*characters*](#def:characters) by callingrdbuf()->sbumpc() orrdbuf()->sgetc()[.](#3.sentence-1)

They may use other public members ofistream[.](#3.sentence-2)
