std-make
std-make copied to clipboard
Exception safety bug in expected
#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.