Hello,
I have tried to compile the following code with the Microsoft
Visual C++ 7.1 compiler.
#include
int main(int argc, char** argv)
{
using namespace std;
using namespace boost;
wstring wstrFoo = boost::lexical_cast<wstring>( 200 );
return 0;
}
If I compile this example with native wchar_t support (/Zc:wchar_t)
everything works fine. Otherwise, if I compile the example without
native wchar_t compiler support, I encounter the following compiler
error:
d:\Temp\Boost\boost\lexical_cast.hpp(150) : error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'std::wstring' (or there is no acceptable conversion)
d:\Temp\Boost\boost\lexical_cast.hpp(189) : see reference to function template instantiation 'bool boost::detail::lexical_stream::operator >><Target>(InputStreamable &)' being
compiled
with
[
Target=std::wstring,
Source=int,
InputStreamable=std::wstring
]
d:\Temp\BoostConsole\BoostConsole.cpp(12) : see reference to function template instantiation 'Target boost::lexical_caststd::wstring,int(Source)' being compiled
with
[
Target=std::wstring,
Source=int
]
As I can see in the header file "lexical_cast.hpp" the macro BOOST_NO_INTRINSIC_WCHAR_T
is defined, if the compiler option /Zc:wchar_t is not specified. This causes the macro
DISABLE_WIDE_CHAR_SUPPORT to be defined as well and thus the lexical_stream::operator(std::wstring)
will not be compiled.
Do anyone know a workaround, so that I can use lexical_cast without native wchar_t
compiler support and wstring?
Is it really necessary to define DISABLE_WIDE_CHAR_SUPPORT, if BOOST_NO_INTRINSIC_WCHAR_T
is defined only? For testing purposes I have commented out the two
#ifndef DISABLE_WIDE_CHAR_SUPPORT statement. Now, I could compile the example without
native wchar_t support. But I think, that this results in side effects, which I'm not able
to see.
Regards,
Jochen.