$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Daryle Walker (dwalker07_at_[hidden])
Date: 2003-06-06 01:09:15
I see the need for two new configuration macros. The need popped up
when I was trying to add a copy constructor to a stream buffer template
class (for completeness) but GCC blocked it.
The std::basic_streambuf<> class template and the std::ios_base class
don't mention any copying semantics in the standard. This means that
they automatically get a copy constructor. However, DR 50 suggests
that std::ios_base shouldn't be copyable. (I think the reason was
unclear semantics, and that all its derived types are non-copyable.)
Recent versions of GCC block copying in ios_base, and they did the same
to basic_streambuf. (The latter was a side-effect; if everything else
was non-copyable, why bother with copyable stream buffers.)
So now, we need macros to detect environments that implement DR 50. We
need two macros because only ios_base is directly involved, the
treatment of basic_streambuf is an optional bonus. From someone
involved on GCC, he _thinks_ that the change happened in GCC 3.1, but
may have happened earlier.
How would we express this macro? Right now, I'm blocking my problem
code with
#if !defined(__GNUC__) || (__GNUC__ < 3) || ((__GNUC__ == 3) &&
(__GNUC_MINOR__ < 1))
Any GCC experts here could correct, either in form, or the exact
version the change happened. We also need to know if any other
compilers have added this change.
Daryle