Don't include <iostream> and "using" declarations in header files

<iostream> sucks in expensive initialization of the standard streams
and isn't appropriate in a header file. Use <istream> and <ostream>
instead.

using declarations should never appear at global scope in a header
file; source files get to decide what they want to use in their
namespace.
This commit is contained in:
timoore
2008-06-02 20:21:27 +00:00
parent 1a498348ee
commit d219c5c4c6
21 changed files with 151 additions and 196 deletions
+22 -1
View File
@@ -20,9 +20,11 @@
//
// $Id$
#include <iostream>
#include "logstream.hxx"
logstream *global_logstream = NULL;
logstream *logstream::global_logstream = 0;
bool logbuf::logging_enabled = true;
#ifdef _MSC_VER
@@ -90,3 +92,22 @@ logstream::setLogLevels( sgDebugClass c, sgDebugPriority p )
logbuf::set_log_level( c, p );
}
void
logstream::initGlobalLogstream()
{
// Force initialization of cerr.
static std::ios_base::Init initializer;
// XXX Is the following still necessary?
#ifdef __APPLE__
/**
* There appears to be a bug in the C++ runtime in Mac OS X that
* will crash if certain funtions are called (in this case
* cerr.rdbuf()) during static initialization of a class. This
* print statement is hack to kick the library in the pants so it
* won't crash when cerr.rdbuf() is first called -DW
**/
std::cout << "Using Mac OS X hack for initializing C++ stdio..."
<< std::endl;
#endif
global_logstream = new logstream(std::cerr);
}