Skip to content
Snippets Groups Projects
Commit 182342fb authored by ilor's avatar ilor
Browse files

use safe_bool in Value's Bool to allow if(b) constructs

parent b1f3fa13
No related branches found
No related tags found
No related merge requests found
...@@ -39,6 +39,17 @@ public: ...@@ -39,6 +39,17 @@ public:
return val_ ? "True" : "False"; 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: private:
bool val_; bool val_;
}; };
......
...@@ -188,4 +188,22 @@ BOOST_AUTO_TEST_CASE(position_ops) ...@@ -188,4 +188,22 @@ BOOST_AUTO_TEST_CASE(position_ops)
BOOST_CHECK(end.equals(minus_one, sc)); 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() BOOST_AUTO_TEST_SUITE_END()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment