diff options
Diffstat (limited to 'test/std/experimental/optional/optional.object/optional.object.assign/assign_value.pass.cpp')
-rw-r--r-- | test/std/experimental/optional/optional.object/optional.object.assign/assign_value.pass.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/test/std/experimental/optional/optional.object/optional.object.assign/assign_value.pass.cpp b/test/std/experimental/optional/optional.object/optional.object.assign/assign_value.pass.cpp new file mode 100644 index 0000000000000..e256a098f1ac7 --- /dev/null +++ b/test/std/experimental/optional/optional.object/optional.object.assign/assign_value.pass.cpp @@ -0,0 +1,72 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <optional> + +// template <class U> optional<T>& operator=(U&& v); + +#include <experimental/optional> +#include <type_traits> +#include <cassert> +#include <memory> + +#if _LIBCPP_STD_VER > 11 + +using std::experimental::optional; + +struct X +{ +}; + +#endif // _LIBCPP_STD_VER > 11 + +int main() +{ +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_assignable<optional<int>, int>::value, ""); + static_assert(std::is_assignable<optional<int>, int&>::value, ""); + static_assert(std::is_assignable<optional<int>&, int>::value, ""); + static_assert(std::is_assignable<optional<int>&, int&>::value, ""); + static_assert(std::is_assignable<optional<int>&, const int&>::value, ""); + static_assert(!std::is_assignable<const optional<int>&, const int&>::value, ""); + static_assert(!std::is_assignable<optional<int>, X>::value, ""); + { + optional<int> opt; + opt = 1; + assert(static_cast<bool>(opt) == true); + assert(*opt == 1); + } + { + optional<int> opt; + const int i = 2; + opt = i; + assert(static_cast<bool>(opt) == true); + assert(*opt == i); + } + { + optional<int> opt(3); + const int i = 2; + opt = i; + assert(static_cast<bool>(opt) == true); + assert(*opt == i); + } + { + optional<std::unique_ptr<int>> opt; + opt = std::unique_ptr<int>(new int(3)); + assert(static_cast<bool>(opt) == true); + assert(**opt == 3); + } + { + optional<std::unique_ptr<int>> opt(std::unique_ptr<int>(new int(2))); + opt = std::unique_ptr<int>(new int(3)); + assert(static_cast<bool>(opt) == true); + assert(**opt == 3); + } +#endif // _LIBCPP_STD_VER > 11 +} |