437c437,438 < result.d = Private::create(&result.value, destroy); --- > { > auto result_d = Private::create(&result.value, destroy); 439,440c440,443 < // now initialize the data < new (result.data()) T(std::forward(arguments)...); --- > // now initialize the data > new (result.data()) T(std::forward(arguments)...); > result.d = result_d; // ctor may throw an exception - result should not own d at that point > }