aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg-test/optional.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src/vcpkg-test/optional.cpp')
-rw-r--r--toolsrc/src/vcpkg-test/optional.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/toolsrc/src/vcpkg-test/optional.cpp b/toolsrc/src/vcpkg-test/optional.cpp
index f3c61387f..520867f2c 100644
--- a/toolsrc/src/vcpkg-test/optional.cpp
+++ b/toolsrc/src/vcpkg-test/optional.cpp
@@ -58,6 +58,27 @@ TEST_CASE ("ref conversion", "[optional]")
REQUIRE(cref_1.get() == &x);
}
+TEST_CASE ("value conversion", "[optional]")
+{
+ using vcpkg::Optional;
+
+ Optional<long> j = 1;
+ Optional<int> i = j;
+ Optional<const char*> cstr = "hello, world!";
+ Optional<std::string> cppstr = cstr;
+
+ std::vector<int> v{1, 2, 3};
+ Optional<std::vector<int>&> o_v(v);
+ REQUIRE(o_v.has_value());
+ REQUIRE(o_v.get()->size() == 3);
+ Optional<std::vector<int>> o_w(std::move(o_v));
+ REQUIRE(o_w.has_value());
+ REQUIRE(o_w.get()->size() == 3);
+ // Moving from Optional<&> should not move the underlying object
+ REQUIRE(o_v.has_value());
+ REQUIRE(o_v.get()->size() == 3);
+}
+
TEST_CASE ("common_projection", "[optional]")
{
using vcpkg::Util::common_projection;