cancel: Fix passing nullopt to constructor
It should be possible to use any of the Handle constructors in addition
to the new default constructor.
Change-Id: I384c5c8a9061d2fde4517bbd75c8b75b705ec1d3
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/stdplus/cancel.hpp b/src/stdplus/cancel.hpp
index 4b52e59..cb40c87 100644
--- a/src/stdplus/cancel.hpp
+++ b/src/stdplus/cancel.hpp
@@ -33,7 +33,8 @@
Cancel() : detail::CancelHandle(std::nullopt)
{
}
- explicit Cancel(Cancelable* c) : detail::CancelHandle(c)
+ template <typename T>
+ explicit Cancel(T&& t) : detail::CancelHandle(t)
{
}
};
diff --git a/test/cancel.cpp b/test/cancel.cpp
index d8c75a8..3efefb8 100644
--- a/test/cancel.cpp
+++ b/test/cancel.cpp
@@ -21,11 +21,22 @@
EXPECT_EQ(c.count, 0);
{
Cancel cancel(&c);
+ EXPECT_TRUE(cancel);
+ Cancel cancel2(std::move(cancel));
+ EXPECT_FALSE(cancel);
+ EXPECT_TRUE(cancel2);
EXPECT_EQ(c.count, 0);
}
EXPECT_EQ(c.count, 1);
}
+TEST(CancelTest, EmptyCancel)
+{
+ Cancel cancel, cancel2(std::nullopt);
+ EXPECT_FALSE(cancel);
+ EXPECT_FALSE(cancel2);
+}
+
TEST(CancelTest, AlwaysCallOnceLambda)
{
size_t ctr = 0;