https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71786
--- Comment #2 from Guille <guille at cal dot berkeley.edu> --- I added some printing-code to it. This is what I get: A() -> INSERT: 0x7fff5c44cb2f ~A() -> ERASE: 0x7fff5c44cb2f ~A() -> ERASE: 0x7fff5c44cb40 Assertion failed: (!all.empty()), function ~A, file gcc_bug.c, line 20. So the constructor for 'A a;' seems to be called, but 'std::experimental::optional' may be missing calling a constructor. This may be a libstdc++ bug, I wasn't sure where to post it.