diff options
Diffstat (limited to 'libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp')
-rw-r--r-- | libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp deleted file mode 100644 index 2924123234a..00000000000 --- a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp +++ /dev/null @@ -1,73 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// UNSUPPORTED: c++98, c++03, c++11, c++14 -// <optional> - -// constexpr T&& optional<T>::operator*() &&; - -#ifdef _LIBCPP_DEBUG -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#endif - -#include <optional> -#include <type_traits> -#include <cassert> - -#include "test_macros.h" - -using std::optional; - -struct X -{ - constexpr int test() const& {return 3;} - int test() & {return 4;} - constexpr int test() const&& {return 5;} - int test() && {return 6;} -}; - -struct Y -{ - constexpr int test() && {return 7;} -}; - -constexpr int -test() -{ - optional<Y> opt{Y{}}; - return (*std::move(opt)).test(); -} - -int main() -{ - { - optional<X> opt; ((void)opt); - ASSERT_SAME_TYPE(decltype(*std::move(opt)), X&&); - // ASSERT_NOT_NOEXCEPT(*std::move(opt)); - // FIXME: This assertion fails with GCC because it can see that - // (A) operator*() is constexpr, and - // (B) there is no path through the function that throws. - // It's arguable if this is the correct behavior for the noexcept - // operator. - // Regardless this function should still be noexcept(false) because - // it has a narrow contract. - } - { - optional<X> opt(X{}); - assert((*std::move(opt)).test() == 6); - } - static_assert(test() == 7, ""); -#ifdef _LIBCPP_DEBUG - { - optional<X> opt; - assert((*std::move(opt)).test() == 3); - assert(false); - } -#endif // _LIBCPP_DEBUG -} |