I ran into trouble when trying to do assignments between hold_any objects. The problem seems to be fixed by adding a missing assignment operator to basic_hold_any: basic_hold_any& operator=(basic_hold_any const& x) { return assign(x); } Here is some code that demonstrates the problem: int main(int argc, char* argv[]) { boost::spirit::hold_any v1 = std::string("val1"); { boost::spirit::hold_any v2 = std::string("val2"); v1 = v2; } return 0; } When executing that function, I get: *** Error in `./foo': double free or corruption (fasttop): 0x0000000001a50040 *** ======= Backtrace: ========= /usr/lib/libc.so.6(+0x731ff)[0x7f4800a331ff] /usr/lib/libc.so.6(+0x789ae)[0x7f4800a389ae] /usr/lib/libc.so.6(+0x796b6)[0x7f4800a396b6] /usr/lib/libstdc++.so.6(_ZNSsD1Ev+0x1f)[0x7f480133956f] ./foo[0x400e74] ./foo[0x400e10] ./foo[0x400cb7] /usr/lib/libc.so.6(__libc_start_main+0xf5)[0x7f48009e1b05] ./foo[0x400b04] ======= Memory map: ======== 00400000-00402000 r-xp 00000000 08:01 16813021 /home/robert/foo 00402000-00403000 rw-p 00001000 08:01 16813021 /home/robert/foo 01a50000-01a71000 rw-p 00000000 00:00 0 [heap] 7f48009c0000-7f4800b5e000 r-xp 00000000 08:01 6163783 /usr/lib/libc-2.19.so 7f4800b5e000-7f4800d5e000 ---p 0019e000 08:01 6163783 /usr/lib/libc-2.19.so 7f4800d5e000-7f4800d62000 r--p 0019e000 08:01 6163783 /usr/lib/libc-2.19.so 7f4800d62000-7f4800d64000 rw-p 001a2000 08:01 6163783 /usr/lib/libc-2.19.so 7f4800d64000-7f4800d68000 rw-p 00000000 00:00 0 7f4800d68000-7f4800d7d000 r-xp 00000000 08:01 6191352 /usr/lib/libgcc_s.so.1 7f4800d7d000-7f4800f7d000 ---p 00015000 08:01 6191352 /usr/lib/libgcc_s.so.1 7f4800f7d000-7f4800f7e000 rw-p 00015000 08:01 6191352 /usr/lib/libgcc_s.so.1 7f4800f7e000-7f480107e000 r-xp 00000000 08:01 6163651 /usr/lib/libm-2.19.so 7f480107e000-7f480127d000 ---p 00100000 08:01 6163651 /usr/lib/libm-2.19.so 7f480127d000-7f480127e000 r--p 000ff000 08:01 6163651 /usr/lib/libm-2.19.so 7f480127e000-7f480127f000 rw-p 00100000 08:01 6163651 /usr/lib/libm-2.19.so 7f480127f000-7f4801365000 r-xp 00000000 08:01 6191360 /usr/lib/libstdc++.so.6.0.19 7f4801365000-7f4801564000 ---p 000e6000 08:01 6191360 /usr/lib/libstdc++.so.6.0.19 7f4801564000-7f480156c000 r--p 000e5000 08:01 6191360 /usr/lib/libstdc++.so.6.0.19 7f480156c000-7f480156e000 rw-p 000ed000 08:01 6191360 /usr/lib/libstdc++.so.6.0.19 7f480156e000-7f4801583000 rw-p 00000000 00:00 0 7f4801583000-7f48015a3000 r-xp 00000000 08:01 6163762 /usr/lib/ld-2.19.so 7f4801778000-7f480177e000 rw-p 00000000 00:00 0 7f48017a1000-7f48017a3000 rw-p 00000000 00:00 0 7f48017a3000-7f48017a4000 r--p 00020000 08:01 6163762 /usr/lib/ld-2.19.so 7f48017a4000-7f48017a5000 rw-p 00021000 08:01 6163762 /usr/lib/ld-2.19.so 7f48017a5000-7f48017a6000 rw-p 00000000 00:00 0 7fff64671000-7fff64692000 rw-p 00000000 00:00 0 [stack] 7fff646a2000-7fff646a4000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Aborted (core dumped)