boost configuration issue

Hello I think I found a configuration issue while building boost 1.32.0 with VC .Net 2003 (VC71) using STLport 5.0 beta (latest from cvs STLPORT_5_0 branch). Maybe someone already notive this problem but the latest boost CVS version still show it. With the STLport lib the macro configuration is : - BOOST_NO_INTRINSIC_WCHAR_T defined - BOOST_NO_STD_WSTRING _not_ defined, wstring are supported Thanks to the BOOST_NO_STD_WSTRING macro the date_time lib instanciate code for wstring specific type. For instance in libs/date_time/src/gregorian/greg_month.cpp you will find a block of code in a #ifndef BOOST_NO_STD_WSTRING block. The date_time lib use the lexical_cast tool. But the lexical_cast tool do not care about BOOST_NO_STD_WSTRING and rather check, among other macros, BOOST_NO_INTRINSIC_WCHAR_T and so do not grant the necessary specialization for wchar_t and wstring. The error message is then something like: D:\boost_1_32_0\boost/lexical_cast.hpp(137): error: no operator "<<" matches these operands operand types are: std::basic_stringstream<wchar_t, std::char_traits<wchar_t> , std::allocator<wchar_t> > << const std::basic_string<char, std::char_traits<char> , std::allocator<char>> return stream << input; Sorry for not having the accurate message but I have the compiler on an other computer. I see 2 possible solutions to this problem: - concider that there is no wstring support if there is no intrinsic wchar_t support. - make lexical_cast less strict and do not require intrinsic wchar_t support. Bests

I think I found a configuration issue while building boost 1.32.0 with VC .Net 2003 (VC71) using STLport 5.0 beta (latest from cvs STLPORT_5_0 branch). Maybe someone already notive this problem but the latest boost CVS version still show it.
With the STLport lib the macro configuration is :
- BOOST_NO_INTRINSIC_WCHAR_T defined - BOOST_NO_STD_WSTRING _not_ defined, wstring are supported
Thanks to the BOOST_NO_STD_WSTRING macro the date_time lib instanciate code for wstring specific type. For instance in libs/date_time/src/gregorian/greg_month.cpp you will find a block of code in a #ifndef BOOST_NO_STD_WSTRING block.
The date_time lib use the lexical_cast tool. But the lexical_cast tool do not care about BOOST_NO_STD_WSTRING and rather check, among other macros, BOOST_NO_INTRINSIC_WCHAR_T and so do not grant the necessary specialization for wchar_t and wstring. The error message is then something like:
D:\boost_1_32_0\boost/lexical_cast.hpp(137): error: no operator "<<" matches these operands operand types are: std::basic_stringstream<wchar_t, std::char_traits<wchar_t> , std::allocator<wchar_t> > << const std::basic_string<char, std::char_traits<char> , std::allocator<char>> return stream << input;
Sorry for not having the accurate message but I have the compiler on an other computer.
Thanks, I can reproduce that with plain VC++ when building date_time without the /Zc:wchar_t switch, I'll look into possible fixes for lexical_cast, John.

I think I found a configuration issue while building boost 1.32.0 with VC .Net 2003 (VC71) using STLport 5.0 beta (latest from cvs STLPORT_5_0 branch). Maybe someone already notive this problem but the latest boost CVS version still show it.
With the STLport lib the macro configuration is :
- BOOST_NO_INTRINSIC_WCHAR_T defined - BOOST_NO_STD_WSTRING _not_ defined, wstring are supported
Thanks to the BOOST_NO_STD_WSTRING macro the date_time lib instanciate code for wstring specific type. For instance in libs/date_time/src/gregorian/greg_month.cpp you will find a block of code in a #ifndef BOOST_NO_STD_WSTRING block.
The date_time lib use the lexical_cast tool. But the lexical_cast tool do not care about BOOST_NO_STD_WSTRING and rather check, among other macros, BOOST_NO_INTRINSIC_WCHAR_T and so do not grant the necessary specialization for wchar_t and wstring. The error message is then something like:
D:\boost_1_32_0\boost/lexical_cast.hpp(137): error: no operator "<<" matches these operands operand types are: std::basic_stringstream<wchar_t, std::char_traits<wchar_t> , std::allocator<wchar_t> > << const std::basic_string<char, std::char_traits<char> , std::allocator<char>> return stream << input;
Sorry for not having the accurate message but I have the compiler on an other computer.
Thanks, I can reproduce that with plain VC++ when building date_time without the /Zc:wchar_t switch, I'll look into possible fixes for lexical_cast,
Unfortunately this looks "unfixable" at present: I don't want to disable std::wstring Boost-wide when wchar_t is not a native type, as that will break other libraries (regex for one). But I haven't been able to force lexical_cast to work when wchar_t is not a native type either (it gets confused as to whether it's reading/writing an integer, or a character). So for now the only solution appears to be "use /Zc:wchar_t to compile date_time and if necessary, your code as well", I realise that's not ideal though... John.
participants (2)
-
François Dumont
-
John Maddock