std-make icon indicating copy to clipboard operation
std-make copied to clipboard

Exception safety bug in expected

Open jwakely opened this issue 3 years ago • 0 comments

#include "experimental/fundamental/v3/expected2/expected.hpp"
using std::experimental::expected;
#include <cstdio>

struct hurts
{
  hurts() { std::puts("ow that hurts"); }
  hurts(const hurts&) { std::puts("owow that hurts too"); }
  ~hurts() { puts("goodbye cruel world"); }
};

bool bring_the_pain;

struct uncopyable
{
  uncopyable() { }
  uncopyable(const uncopyable&) { if (bring_the_pain) throw "pain!"; }
};

int main()
{
  expected<uncopyable, hurts> expo;
  try
  {
    bring_the_pain = true;
    auto expono = expo;
  }
  catch (...)
  { }
}

This prints:

goodbye cruel world

That comes from the destructor of an object that was never constructed, i.e. undefined behaviour.

jwakely avatar Sep 09 '21 18:09 jwakely