Boost logo

Boost :

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


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