From 182342fb3e6ecbe1b51f786acd650c774248ac78 Mon Sep 17 00:00:00 2001 From: ilor <kailoran@gmail.com> Date: Wed, 9 Mar 2011 12:37:37 +0100 Subject: [PATCH] use safe_bool in Value's Bool to allow if(b) constructs --- libwccl/values/bool.h | 11 +++++++++++ tests/values.cpp | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/libwccl/values/bool.h b/libwccl/values/bool.h index 53393fb..a915213 100644 --- a/libwccl/values/bool.h +++ b/libwccl/values/bool.h @@ -39,6 +39,17 @@ public: return val_ ? "True" : "False"; } + typedef void (Bool::*safe_bool)() const; + void safe_bool_helper() const {} + + operator safe_bool() const { + return val_ ? &Bool::safe_bool_helper : 0; + } + + bool operator!() const { + return !val_; + } + private: bool val_; }; diff --git a/tests/values.cpp b/tests/values.cpp index d87c1b1..837e1e2 100644 --- a/tests/values.cpp +++ b/tests/values.cpp @@ -188,4 +188,22 @@ BOOST_AUTO_TEST_CASE(position_ops) BOOST_CHECK(end.equals(minus_one, sc)); } +BOOST_AUTO_TEST_CASE(bool_safe_bool) +{ + Bool b(false); + BOOST_CHECK(!b); + if (b) { + BOOST_ERROR("if (b) on Bool(false)"); + } + b.set_value(true); + if (!b) { + BOOST_ERROR("if (!b) on Bool(true)"); + } + if (b) { + } else { + BOOST_ERROR("if (b) else reached on Bool(true)"); + } + BOOST_CHECK(b); +} + BOOST_AUTO_TEST_SUITE_END() -- GitLab