|
Boost : |
Subject: [boost] [lexical_cast] Error casting void* to std::string
From: GMan (gmannickg_at_[hidden])
Date: 2011-11-23 16:36:36
I did a search on the mailing list and found nothing, but apologies if I
missed it. This bug seems to be new to 1.48. Compiling the following code
in MSVC2010:
#include <boost/lexical_cast.hpp>
#include <string>
int main()
{
void* ptr = 0;
boost::lexical_cast<std::string>(ptr);
}
Results in an error, pointing to line 1738 in boost\lexical_cast.hpp,
stating: 'removed_ptr_t': illegal sizeof operand. ('removed_ptr_t' is,
however, defined a few lines above.) I see nothing wrong with the code from
a C++ point-of-view, so I'm guessing this is another MSVC bug. Is this
known? I don't see an immediate permanent workaround.
A client-side workaround exists by introducing this small class:
struct print_ptr
{
explicit print_ptr(void* ptr) :
mPtr(ptr)
{}
friend std::ostream& operator<<(std::ostream& sink, print_ptr printPtr)
{
return sink << printPtr.mPtr;
}
private:
void* mPtr;
};
And using: boost::lexical_cast<std::string>(print_ptr(ptr));
-- GMan, Nick Gorski
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk