diff options
Diffstat (limited to 'test/std/experimental/optional/optional.object/optional.object.swap/swap.pass.cpp')
| -rw-r--r-- | test/std/experimental/optional/optional.object/optional.object.swap/swap.pass.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/test/std/experimental/optional/optional.object/optional.object.swap/swap.pass.cpp b/test/std/experimental/optional/optional.object/optional.object.swap/swap.pass.cpp index 620dda19e3ff..f2d373c299bf 100644 --- a/test/std/experimental/optional/optional.object/optional.object.swap/swap.pass.cpp +++ b/test/std/experimental/optional/optional.object/optional.object.swap/swap.pass.cpp @@ -8,7 +8,6 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++98, c++03, c++11 -// XFAIL: libcpp-no-exceptions // <optional> // void swap(optional&) @@ -19,6 +18,8 @@ #include <type_traits> #include <cassert> +#include "test_macros.h" + using std::experimental::optional; class X @@ -56,11 +57,15 @@ class Z int i_; public: Z(int i) : i_(i) {} - Z(Z&&) {throw 7;} + Z(Z&&) {TEST_THROW(7);} friend constexpr bool operator==(const Z& x, const Z& y) {return x.i_ == y.i_;} - friend void swap(Z& x, Z& y) {throw 6;} + friend void swap(Z&, Z&) {TEST_THROW(6);} +}; + +struct ConstSwappable { }; +void swap(ConstSwappable const&, ConstSwappable const&) {} int main() { @@ -113,6 +118,11 @@ int main() assert(*opt2 == 1); } { + optional<const ConstSwappable> opt; + optional<const ConstSwappable> opt2; + opt.swap(opt2); + } + { optional<X> opt1; optional<X> opt2; static_assert(noexcept(opt1.swap(opt2)) == true, ""); @@ -222,6 +232,7 @@ int main() assert(static_cast<bool>(opt2) == true); assert(*opt2 == 1); } +#ifndef TEST_HAS_NO_EXCEPTIONS { optional<Z> opt1; optional<Z> opt2; @@ -298,4 +309,5 @@ int main() assert(static_cast<bool>(opt2) == true); assert(*opt2 == 2); } +#endif } |
