|
Boost : |
Subject: Re: [boost] [lexical_cast] Error casting void* to std::string
From: GMan (gmannickg_at_[hidden])
Date: 2011-11-23 19:08:06
On Wed, Nov 23, 2011 at 2:18 PM, Marshall Clow <mclow.lists_at_[hidden]>wrote:
> gcc 4.2.1 complains about this code, too:
> [...]
> Interestingly enough, clang doesn't mind it at all.
>
Ah yes, I see it now; should have before. In the case where Source is
void*, removed_ptr_t is void, and sizeof(void) is an error. (Perhaps clang
allows sizeof(void) as an extension?)
In any case, it seems a specialization/branch is needed for void*, but I
don't know the internals of lexical_cast well enough to know what the
result of that branch should be in this situation.
> What do you expect this code to do?
>
In my mind, lexical_cast is a nicer/safer/optimized version of a
std::stringstream cast. That is, in the case of no errors
lexical_cast<R>(x) has the same result as:
template <typename S>
R lexical_cast_exposition(const S& x) // assumes no errors
{
std::stringstream ss;
ss << x;
R y;
ss >> y;
return y;
}
In my case, S is void* and R is std::string (and it uses ostream&
operator<<(const void*)).
-- 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