
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) );
Yes, your code looks about right. Would you care to submit a patch for me to apply? Regards Hartmut --------------- http://boost-spirit.com http://stellar.cct.lsu.edu