Hi,
The boost::spirit::hold_any implementation includes the following functions
defined in the detail sub-namespace:
// member of fxnsmpl::true_ specialisation, line 99
static void move(void* const* src, void** dest)
{
reinterpret_cast(dest)->~T();
*reinterpret_cast(dest) =
*reinterpret_cast(src);
}
// member of fxnsmpl::false_ specialisation, line 99
static void move(void* const* src, void** dest)
{
(*reinterpret_cast(dest))->~T();
**reinterpret_cast(dest) =
**reinterpret_cast(src);
}
As I understand it, the object is destroyed _and then assigned to_; does it
not need to be constructed at this point, i.e. have something like this
(for the first specialisation):
new (reinterpret_cast(dest)) T(
*reinterpret_cast(src) );
Thanks & apologies if I've misunderstood
--rob
http://theotherbranch.wordpress.com/