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
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost