On Thu, Nov 08, 2007 at 10:31:02PM +0100, Andre Poenitz wrote:
> On Thu, Nov 08, 2007 at 10:10:48PM +0100, Enrico Forestieri wrote:
> > [...]
> > > The Standard says how basic_istream<> etc should be defined. It does not
> > > mandate that #include <iosfwd> is the only way to get it. Doing it 'by
> > > hand' is as legal even if less convienient than the #include.
> > 
> > Then do it, by all means.
> 
> I am currently compiling with the attached changes. Would be nice if you
> could verify that it would work for you as well.

The attached patch works for me. Abdel, if you confirm that it also
works with MSVC I will commit it.

-- 
Enrico
Index: src/support/strfwd.h
===================================================================
--- src/support/strfwd.h        (revision 21527)
+++ src/support/strfwd.h        (working copy)
@@ -1,14 +1,14 @@
 // -*- C++ -*-
-/**
- * \file strfwd.h
- * This file is part of LyX, the document processor.
- * Licence details can be found in the file COPYING.
- *
- * \author André Pönitz
- * \author Enrico Forestieri
- *
- * Full author contact details are available in file CREDITS.
- */
+
+// Heavily inspired by /usr/include/c++/4.1/bits
+//
+// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
 
 #ifndef STRFWD_H
 #define STRFWD_H
@@ -28,17 +28,28 @@ namespace lyx { typedef boost::uint32_t 
 
 #endif
 
-#include <iosfwd>
 
-// We have to forward declare the string type as not all compilers
-// do that in the iosfwd header.
-namespace std
-{
+namespace std {
+
+template<typename Alloc> class allocator;
+
+template<typename Char> struct char_traits;
+template<> struct char_traits<char>;
+#ifdef USE_WCHAR_T
+template<> struct char_traits<wchar_t>;
+#endif
 
 template<typename Char, typename Traits, typename Alloc> class basic_string;
 typedef basic_string<char, char_traits<char>, allocator<char> > string;
 
-}
+template<class Char, class Traits> class basic_istream;
+template<class Char, class Traits> class basic_ostream;
+
+typedef basic_istream<char, char_traits<char> > istream;
+typedef basic_ostream<char, char_traits<char> > ostream;
+
+} // namepace std
+
 
 namespace lyx {
 
@@ -47,10 +58,10 @@ typedef std::basic_string<char_type, std
        std::allocator<char_type> > docstring;
 
 /// Base class for UCS4 input streams
-typedef std::basic_istream<char_type> idocstream;
+typedef std::basic_istream<char_type, std::char_traits<char_type> > idocstream;
 
 /// Base class for UCS4 output streams
-typedef std::basic_ostream<char_type> odocstream;
+typedef std::basic_ostream<char_type, std::char_traits<char_type> > odocstream;
 
 #if ! defined(USE_WCHAR_T)
 extern odocstream & operator<<(odocstream &, char);

Reply via email to