OSDN Git Service

Support/SystemError: Make error_category and error_code auto-bool-conversion-safe.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Sat, 4 Dec 2010 00:32:24 +0000 (00:32 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Sat, 4 Dec 2010 00:32:24 +0000 (00:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120869 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/system_error.h

index 9d4a8b7..40f5b3c 100644 (file)
@@ -708,8 +708,12 @@ public:
   const error_category& category() const {return *_cat_;}
   std::string message() const;
 
-  // explicit
-  operator bool() const {return _val_ != 0;}
+  typedef void (*unspecified_bool_type)();
+  static void unspecified_bool_true() {}
+
+  operator unspecified_bool_type() const { // true if error
+    return _val_ == 0 ? 0 : unspecified_bool_true;
+  }
 };
 
 inline error_condition make_error_condition(errc _e) {
@@ -767,8 +771,12 @@ public:
 
   std::string message() const;
 
-  // explicit
-  operator bool() const {return _val_ != 0;}
+  typedef void (*unspecified_bool_type)();
+  static void unspecified_bool_true() {}
+
+  operator unspecified_bool_type() const { // true if error
+    return _val_ == 0 ? 0 : unspecified_bool_true;
+  }
 };
 
 inline error_code make_error_code(errc _e) {