Re: codecvt problem
On 2011-06-08 16:24, Vaclav Haisman wrote:
Martin Bonner wrote, On 8.6.2011 10:06:
But memset produces undefined behaviour if mbstate_t is (for example)
void *. I /think/ the only way to fix this is something like:
Why does it produce undefined behaviour? You can always take address of a
void pointer and zero the pointer.
That has never been guaranteed by either the C or the C++ standard:
the object representation that has all zero bits does not necessarily
yield the value representation of a null pointer.
Nevertheless, the habit of "using memset for everything" seems to be
quite widespread, which I consider an abomination.
namespace { mbstate_t zerostate; }
int main () { mbstate_t mystate = zerostate;...}
But that's an awful faf.
That would be usable. Ideal would be if we had some
std::mbstate_init(mbstate_t &) function or similar.
Or an initializer macro could be better, as in:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
What we need ideally is not an initialization function or initializer
macro for each type whose variable needs to be initialized, but a uniform
syntax to initialize a variable of any type. That's what the C++0x uniform
initializer syntax brought to us. Unfortunately, that came too late,
and we have different sets of available methods in C, C++03, and C++0x,
and initializing an object of an opaque type has become a pain.
--
Seungbeom Kim
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]