Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > <iosfwd> & typedefs with incomplete types.

Reply
Thread Tools

<iosfwd> & typedefs with incomplete types.

 
 
Steven T. Hatton
Guest
Posts: n/a
 
      07-07-2005
I copied what I believe is a complete representation of <iosfwd> from
ISO/IEC 14882:2003(E). My understanding of the rules covering typedefs,
templates and forward declarations is not very solid. As I understand
what is presented here, the typedefs are declaring typedef-names which
refer to incomplete types. That is to say, they are becoming synonyms
for forward declarations of class template instances. I see nothing in
the Standard suggesting this is not legal. Is it?

I have been told with great conviction that there are some circular
dependencies involved in bootstrapping the I/O system. On of them,
IIRC, involves where char_traits<> is defined. Is anybody familiar
with this complication? Perhaps this is what is addressed in the note
near the end below?


#ifndef IOSFWD
#define IOSFWD

namespace std {
// page 607 footnote:
// 263) It is the implementation?s responsibility to implement headers so that
// including <iosfwd> and other headers does not violate the rules about multiple
// occurences of default arguments.


template<class charT> class char_traits;
template<> class char_traits<char>;
template<> class char_traits<wchar_t>;
template <class T> class allocator;
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 Allocator = allocator<charT> > class basic_stringbuf;
template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > class basic_istringstream;
template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > class basic_ostringstream;
template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > class basic_stringstream;
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 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_stringbuf<char> stringbuf;
typedef basic_istringstream<char> istringstream;
typedef basic_ostringstream<char> ostringstream;
typedef basic_stringstream<char> stringstream;
typedef basic_filebuf<char> filebuf;
typedef basic_ifstream<char> ifstream;
typedef basic_ofstream<char> ofstream;
typedef basic_fstream<char> fstream;
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_stringbuf<wchar_t> wstringbuf;
typedef basic_istringstream<wchar_t> wistringstream;
typedef basic_ostringstream<wchar_t> wostringstream;
typedef basic_stringstream<wchar_t> wstringstream;
typedef basic_filebuf<wchar_t> wfilebuf;
typedef basic_ifstream<wchar_t> wifstream;
typedef basic_ofstream<wchar_t> wofstream;
typedef basic_fstream<wchar_t> wfstream;
template <class state> class fpos;
typedef fpos<char_traits<char>::state_type> streampos;
typedef fpos<char_traits<wchar_t>::state_type> wstreampos;

/*
This synopsis suggests a circularity between streampos and char_traits<char>. An implementa-
tion can avoid this circularity by substituting equivalent types. One way to do this might be

template<class stateT> class fpos { ... };// depends on nothing
typedef ... _STATE; // implementation private declaration of stateT
typedef fpos<_STATE> streampos;
template<> struct char_traits<char> {
typedef streampos
pos_type;
// ...
}
*/

}

#endif
--
Use the Source Luke.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
too many typedefs cppaddict C++ 2 06-19-2004 04:07 AM
using declarations with nested typedefs Dave C++ 4 12-05-2003 11:45 PM
Templates and Typedefs dwrayment C++ 6 08-14-2003 05:52 AM
STL typedefs and base class pointer problem emerth C++ 3 08-08-2003 05:47 AM
Re: visibility of typedefs Alexander Stippler C++ 5 06-25-2003 09:34 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57