]> granicus.if.org Git - clang/commitdiff
[analyzer] Put back DefaultBool's implicit conversion to bool.
authorJordan Rose <jordan_rose@apple.com>
Wed, 15 May 2013 18:08:15 +0000 (18:08 +0000)
committerJordan Rose <jordan_rose@apple.com>
Wed, 15 May 2013 18:08:15 +0000 (18:08 +0000)
DefaultBool is basically just "bool with a default constructor", so it
really should implicitly convert to bool. In fact, it should convert to
bool&, so that it could be passed to functions that take bools by reference.

This time, mark the operator bool& as implicit to promise that it's
deliberate.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181908 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/StaticAnalyzer/Core/Checker.h

index d56f8e9c1d4e847ec582a368605428d2d971586d..219e99cfd41dea97fb25fbbb39e916858f09f203 100644 (file)
@@ -502,10 +502,14 @@ struct ImplicitNullDerefEvent {
 };
 
 /// \brief A helper class which wraps a boolean value set to false by default.
+///
+/// This class should behave exactly like 'bool' except that it doesn't need to
+/// be explicitly initialized.
 struct DefaultBool {
   bool val;
   DefaultBool() : val(false) {}
-  LLVM_EXPLICIT operator bool() const { return val; }
+  /*implicit*/ operator bool&() { return val; }
+  /*implicit*/ operator const bool&() const { return val; }
   DefaultBool &operator=(bool b) { val = b; return *this; }
 };