/*  Copyright (C) 2015  Povilas Kanapickas <povilas@radix.lt>

    This file is part of cppreference-doc

    This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
    Unported License. To view a copy of this license, visit
    http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
    Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3 or
    any later version published by the Free Software Foundation; with no
    Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
*/

#ifndef CPPREFERENCE_IOSFWD_H
#define CPPREFERENCE_IOSFWD_H

namespace std {

template<class CharT> struct char_traits;

template<class T> class allocator;

class ios_base;
template<class CharT, class Traits = char_traits<CharT>> class basic_ios;

template<class CharT, class Traits = char_traits<CharT>> class basic_streambuf;
template<class CharT, class Traits = char_traits<CharT>> class basic_istream;
template<class CharT, class Traits = char_traits<CharT>> class basic_ostream;
template<class CharT, class Traits = char_traits<CharT>> class basic_iostream;

template<class CharT, class Traits = char_traits<CharT>> class basic_filebuf;
template<class CharT, class Traits = char_traits<CharT>> class basic_ifstream;
template<class CharT, class Traits = char_traits<CharT>> class basic_ofstream;
template<class CharT, class Traits = char_traits<CharT>> class basic_fstream;

template<class CharT, class Traits = char_traits<CharT>, class Alloc = allocator<CharT>>
class basic_stringbuf;
template<class CharT, class Traits = char_traits<CharT>, class Alloc = allocator<CharT>>
class basic_istringstream;
template<class CharT, class Traits = char_traits<CharT>, class Alloc = allocator<CharT>>
class basic_ostringstream;
template<class CharT, class Traits = char_traits<CharT>, class Alloc = allocator<CharT>>
class basic_stringstream;

template<class CharT, class Traits = char_traits<CharT>> class istreambuf_iterator;
template<class CharT, class Traits = char_traits<CharT>> class ostreambuf_iterator;

typedef basic_ios<char> ios;
typedef basic_ios<wchar_t> wios;

typedef basic_streambuf<char> streambuf;
typedef basic_istream<char> istream;
typedef basic_ostream<char> ostream;
typedef basic_iostream<char> iostream;

typedef basic_filebuf<char> filebuf;
typedef basic_ifstream<char> ifstream;
typedef basic_ofstream<char> ofstream;
typedef basic_fstream<char> fstream;

typedef basic_stringbuf<char> stringbuf;
typedef basic_istringstream<char> istringstream;
typedef basic_ostringstream<char> ostringstream;
typedef basic_stringstream<char> stringstream;

typedef basic_streambuf<wchar_t> wstreambuf;
typedef basic_istream<wchar_t> wistream;
typedef basic_ostream<wchar_t> wostream;
typedef basic_iostream<wchar_t> wiostream;

typedef basic_filebuf<wchar_t> wfilebuf;
typedef basic_ifstream<wchar_t> wifstream;
typedef basic_ofstream<wchar_t> wofstream;
typedef basic_fstream<wchar_t> wfstream;

typedef basic_stringbuf<wchar_t> wstringbuf;
typedef basic_istringstream<wchar_t> wistringstream;
typedef basic_ostringstream<wchar_t> wostringstream;
typedef basic_stringstream<wchar_t> wstringstream;

template<class state> class fpos;
typedef fpos<char_traits<char>::state_type> streampos;
typedef fpos<char_traits<wchar_t>::state_type> wstreampos;

} // namespace std

#endif // CPPREFERENCE_IOSFWD_H
