detail: improve ScopedCancelHandle

This also removes deprecated implicit conversion operators
from 'FooHandle' types to 'const FooId*'

Change-Id: I5b412bf833bb106b8f5aa483dbe09b6c58736e19
diff --git a/tests/unit/util/scheduler.t.cpp b/tests/unit/util/scheduler.t.cpp
index d403a7c..021c1f0 100644
--- a/tests/unit/util/scheduler.t.cpp
+++ b/tests/unit/util/scheduler.t.cpp
@@ -249,7 +249,7 @@
   BOOST_CHECK(eid == EventId{});
 }
 
-BOOST_AUTO_TEST_CASE(Valid)
+BOOST_AUTO_TEST_CASE(OperatorBool)
 {
   EventId eid;
   BOOST_CHECK_EQUAL(static_cast<bool>(eid), false);
@@ -366,6 +366,26 @@
   BOOST_CHECK_EQUAL(hit, 2);
 }
 
+BOOST_AUTO_TEST_CASE(OperatorBool)
+{
+  ScopedEventId se;
+  BOOST_CHECK_EQUAL(static_cast<bool>(se), false);
+  BOOST_CHECK_EQUAL(!se, true);
+
+  se = scheduler.schedule(10_ms, []{});
+  BOOST_CHECK_EQUAL(static_cast<bool>(se), true);
+  BOOST_CHECK_EQUAL(!se, false);
+
+  se.cancel();
+  BOOST_CHECK(!se);
+
+  se = scheduler.schedule(10_ms, []{});
+  BOOST_CHECK(se);
+
+  se.release();
+  BOOST_CHECK(!se);
+}
+
 BOOST_AUTO_TEST_SUITE_END() // ScopedEventId
 
 BOOST_AUTO_TEST_SUITE_END() // TestScheduler