Boost logo

Boost :

From: John Maddock (jm_at_[hidden])
Date: 2002-09-01 05:41:28

> A simple question: I'm rewriting the stream inserter and the stream
> extractor for dynamic_bitset. Having a need for widening the
> characters '0' and '1' I have used BOOST_USE_FACET:
> Ch const zero = BOOST_USE_FACET(std::ctype<Ch>, loc).widen('0');
> Ch const one = BOOST_USE_FACET(std::ctype<Ch>, loc).widen('1');
> Anyhow the code fails to compile on VC++ 6.0 with STLport 4.5.3
> because BOOST_USE_FACET is not defined at all. Of course it should.
> BTW in this situation one can just use the standard syntax.
> The problem seems to be that BOOST_NO_STD_LOCALE gets defined
> somewhere (note that I use SGI IOStreams), thus config/suffix.hpp
> defines BOOST_NO_STD_USE_FACET but finds none of
> defined to select the appropriate definition for BOOST_USE_FACET.
> Why BOOST_NO_STD_LOCALE gets defined?

It's a namespace handling bug, the code that gets triggered in this case is
(at least I think I've got this right):

#if !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) &&
defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__)

the problem is that things like:

const std::ctype<char>* pct;

don't compile !!

John Maddock

Boost list run by bdawes at, gregod at, cpdaniel at, john at