> -----Original Message-----
> From: Martin Sebor [mailto:sebor@roguewave.com]
> Sent: Tuesday, March 20, 2007 6:23 PM
> To: stdcxx-dev@incubator.apache.org
> Subject: Re: Boost + stdcxx (status)
>
> Farid Zaripov wrote:
> > Hi All.
> >
> > I have been working on adding support of the stdcxx
> library to the
> > boost build system.
> > I have created the .jam files to build boost library with
> stdcxx using
> > MSVC 7.1 and 8.0.
> > There are some errors during build process.
> >
> > The mostly error is: error C2039: 'mbstate_t' : is not a
> member of
> > 'std'. And the same error, but with ptrdiff_t instead of mbstate_t.
> >
> > I will check where the problem is.
>
> I suspect the problem is with Boost code making the common
> but incorrect assumption about which headers the C types are
> defined in. They are only required to be defined in the
> following headers:
>
> mbstate_t: <cwchar>
> ptrdiff_t: <cstddef>
> size_t: <cstddef>, <cstdio>, <cstdlib>, <cstring>, <ctime>
>
> (in addition to their traditional .c counterparts). While
> most other implementations #include many of these headers in
> most others, stdcxx conforms strictly to these requirements
> in order not to pollute the user namespace with additional symbols.
You're right. For example the file utf8_codecvt_facet.hpp:
#include <locale>
// for mbstate_t
#include <wchar.h>
// for std::size_t
#include <cstddef>
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
namespace std {
#if defined(__LIBCOMO__)
using ::mbstate_t;
#elif defined(BOOST_DINKUMWARE_STDLIB)
using ::mbstate_t;
#elif defined(__SGI_STL_PORT)
#elif defined(BOOST_NO_STDC_NAMESPACE)
using ::mbstate_t;
using ::codecvt;
#endif
} // namespace std
[...]
struct BOOST_UTF8_DECL utf8_codecvt_facet :
public std::codecvt<wchar_t, char, std::mbstate_t>
{
[...]
Here #included wchar.h header file and then mbstate_t introduced into
namespace std for some implementations.
Farid.