Boost logo

Boost :

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


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk