$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Robert Ramey (ramey_at_[hidden])
Date: 2004-07-17 21:01:12
>Rene Rivera wrote:
 >> Robert Ramey wrote:
 >>
 >>> While your looking at CW, might you find the time to look a little bit
 >>> into
 >>> the serialization library build problems.  The error message is pretty
 >>> bizarre so I don't think it can be addressed without having CW
 >>> installed on
 >>> ones machine.
 >>
 >> OK, I'll try... Should I look for anything in specific? Or is it a
 >> general health issue?
>I'm looking at this and one of the basic problems is that you seem to 
>assume a variety of things are available in the global namespace, 
>specifically size_t and other std types. Those are easy to fix by 
>specifying std::size_t. But I do have some questions...
>1. Is using an unqualified size_t your intention? And therefore 
>something else is broken?
Wow - its amazing to me I could have come so far and not know that size_t
wasn't a built in type or macro - I think it used to be a macro definition.
Anyway, I'll qualify this with std::size_t and check that no other compilers
complain.  If fact, now I can't understand why no other compiler complained
since I never included <cstddef>
>2. There is a similar problem with mbstate_t, but in this case you 
>attempt to do something special to handle it (from 
>boost/archive/codecvt_null.hpp):
>#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564)
>     #ifndef _RWSTD_NO_NAMESPACE
>     using std::codecvt;
>     using std::min;
>     #ifdef _RWSTD_NO_MBSTATE_T
>     using std::mbstate_t;
>     #endif
>     #endif
>#elif defined(__COMO__) || defined(_MSC_VER) && _MSC_VER <= 1300  || 
>defined(__BORLANDC__)
>     typedef ::mbstate_t mbstate_t;
>#elif defined(BOOST_NO_STDC_NAMESPACE)
>     typedef std::mbstate_t mbstate_t;
>     namespace std{
>         using ::codecvt;
>     } // namespace std
>#endif
>And then you go ahead to use an unqualified mbstate_t. This just doesn't 
>work for CW. And I don't see how this would work for any library runtime 
>that puts mbstate_t only in the std namespace. Could you explain what 
>your intent is for this? 
The situation with mbstate_t is problematic.  Some compilers define it in
the global namespace while others define it in std::mbstate_t.  The intent
is to permit the code to use mbstate_t without qualification for those
compilers that don't define it as std::mbstate_t.  This sort of grew one
compiler at time without too much thought.  The typedef ::mbstate_t
mbstate_t makes me wonder what I was thinking.  Following the logic here for
CW this would add
#elif defined(CW)
        using std::mbstate_t;
so that the rest of the code could use unqualified mbstate_t .
I'll fix this (and a bunch other stuff) and we'll try again later.
Thanks a lot.
Robert Ramey