Boost logo

Boost :

From: Julio M. Merino Vidal (jmmv84_at_[hidden])
Date: 2005-06-19 12:52:36


Hi all,

while developing some code for Boost, I've had to add some more tests to
the configuration headers so that BOOST_NO_STDC_NAMESPACE gets defined
when some functions cannot be found (e.g., std::strdup, which is missing
under NetBSD). This is irrelevant, because this symbol could get
defined in a future by other changes in Boost.

The problem is that when BOOST_NO_STDC_NAMESPACE is defined under
NetBSD, Boost.Iostreams does not work any more and breaks the build of
programs using it. Consider the following code example:

-----
#define BOOST_NO_STDC_NAMESPACE
#include <boost/iostreams/device/file_descriptor.hpp>
int main(void) { return 0; }
-----

When building it, I get:

-----
$ g++ -I/home/jmmv/opt/include test.cc
In file included
from /home/jmmv/opt/include/boost/iostreams/positioning.hpp:19,

from /home/jmmv/opt/include/boost/iostreams/device/file_descriptor.hpp:24,
                 from test.cc:2:
/home/jmmv/opt/include/boost/iostreams/detail/config/codecvt.hpp:70:
error: `
   codecvt' not declared
-----

The problem arises because codecvt does not exist in the global
namespace under NetBSD, although it does inside std::. Therefore, the
'using ::codecvt' line (the one that triggers the error) breaks the
build.

I don't know how this should be fixed, so I'm just sending a bug
report. Maybe the BOOST_NO_STDC_NAMESPACE definition should be made
more fine grained, so that defining it due to the lack of a function
does not affect others that may exist?

Should I file a bug report or is this message enough?

Thanks,

-- 
Julio M. Merino Vidal <jmmv84_at_[hidden]>
http://www.livejournal.com/users/jmmv/
The NetBSD Project - http://www.NetBSD.org/

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