diff options
Diffstat (limited to 'test/std/experimental/optional/optional.object/optional.object.assign/emplace.pass.cpp')
-rw-r--r-- | test/std/experimental/optional/optional.object/optional.object.assign/emplace.pass.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/test/std/experimental/optional/optional.object/optional.object.assign/emplace.pass.cpp b/test/std/experimental/optional/optional.object/optional.object.assign/emplace.pass.cpp index 94f2bb21a475..256396094a90 100644 --- a/test/std/experimental/optional/optional.object/optional.object.assign/emplace.pass.cpp +++ b/test/std/experimental/optional/optional.object/optional.object.assign/emplace.pass.cpp @@ -8,7 +8,6 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++98, c++03, c++11 -// XFAIL: libcpp-no-exceptions // <optional> // template <class... Args> void optional<T>::emplace(Args&&... args); @@ -18,6 +17,8 @@ #include <cassert> #include <memory> +#include "test_macros.h" + using std::experimental::optional; class X @@ -48,7 +49,7 @@ class Z public: static bool dtor_called; Z() = default; - Z(int) {throw 6;} + Z(int) {TEST_THROW(6);} ~Z() {dtor_called = true;} }; @@ -81,6 +82,12 @@ int main() assert(*opt == 1); } { + optional<const int> opt(2); + opt.emplace(1); + assert(static_cast<bool>(opt) == true); + assert(*opt == 1); + } + { optional<X> opt; opt.emplace(); assert(static_cast<bool>(opt) == true); @@ -125,6 +132,7 @@ int main() assert(Y::dtor_called == true); } } +#ifndef TEST_HAS_NO_EXCEPTIONS { Z z; optional<Z> opt(z); @@ -141,4 +149,5 @@ int main() assert(Z::dtor_called == true); } } +#endif } |