diff options
Diffstat (limited to 'test/std/experimental/optional/optional.object/optional.object.assign/copy.pass.cpp')
-rw-r--r-- | test/std/experimental/optional/optional.object/optional.object.assign/copy.pass.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/test/std/experimental/optional/optional.object/optional.object.assign/copy.pass.cpp b/test/std/experimental/optional/optional.object/optional.object.assign/copy.pass.cpp index 89ea345029c2..17ee9754531f 100644 --- a/test/std/experimental/optional/optional.object/optional.object.assign/copy.pass.cpp +++ b/test/std/experimental/optional/optional.object/optional.object.assign/copy.pass.cpp @@ -8,7 +8,6 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++98, c++03, c++11 -// XFAIL: libcpp-no-exceptions // <optional> // optional<T>& operator=(const optional<T>& rhs); @@ -17,8 +16,17 @@ #include <type_traits> #include <cassert> +#include "test_macros.h" + using std::experimental::optional; +struct AllowConstAssign { + AllowConstAssign(AllowConstAssign const&) {} + AllowConstAssign const& operator=(AllowConstAssign const&) const { + return *this; + } +}; + struct X { static bool throw_now; @@ -27,7 +35,7 @@ struct X X(const X&) { if (throw_now) - throw 6; + TEST_THROW(6); } }; @@ -43,6 +51,11 @@ int main() assert(static_cast<bool>(opt) == static_cast<bool>(opt2)); } { + optional<const AllowConstAssign> opt; + optional<const AllowConstAssign> opt2; + opt = opt2; + } + { optional<int> opt; constexpr optional<int> opt2(2); opt = opt2; @@ -67,6 +80,7 @@ int main() assert(static_cast<bool>(opt) == static_cast<bool>(opt2)); assert(*opt == *opt2); } +#ifndef TEST_HAS_NO_EXCEPTIONS { optional<X> opt; optional<X> opt2(X{}); @@ -83,4 +97,5 @@ int main() assert(static_cast<bool>(opt) == false); } } +#endif } |